2012-08-12 54 views
0

我有这个字符串:'foo = bar; this = is; not = necessary'如何从字符串中获取两个变量?

我希望得到这样的结果:{"name" : "foo", "value" : "bar"}

这是没有必要的,什么是后;

我知道,我应该使用一些正则表达式,但我真的不明白正则表达式的工作原理。

谢谢你是进步,

+0

名称/值对总是会先出现吗?会不会有一致的名字? – 2012-08-12 15:12:46

+0

字符串从哪里来?如果它使用的是URL查询字符串格式(例如'foo = bar&this = is&not = necessary'),则会更方便。然后你会用相应的函数解析它。 – 2012-08-12 15:14:48

回答

3

你可以使用:

var values='foo = bar; this = is; not = necessary'.split('; ')[0].split(' = '); 
var obj={"name" : values[0], "value" : values[1]} 

这样,你做的事:

  1. 'foo = bar; this = is; not = necessary'.split('; '),它返回['foo = bar','this = is','not = necessary']
  2. 你想仅仅是第一要素,所以'foo = bar; this = is; not = necessary'.split(';')[0]给出'foo = bar'
  3. 然后你再次分裂:'foo = bar; this = is; not = necessary'.split(';')[0].split(' = '),这给['foo','bar']
  4. 最后创建对象
1

使用正则表达式在一个特定的字符串进行搜索,查找指定名称的做法,这将匹配foo = bar部分字符串:

function getNameValuePair(string, needle) { 
    if (!string || !needle) { 
     return false; 
    } 
    else { 
     var newNeedle = needle + '\\s+\\=\\s+\\w+', 
      expr = new RegExp(newNeedle), 
      parsed = string.match(expr).join(), 
      parts = parsed.split(/\s+\=\s+/), 
      returnObj = {'name' : parts[0], 'value' : parts[1]}; 

     return returnObj; 
    } 
} 

var string = 'foo = bar; this = is; not = necessary', 
    nameValueObj = getNameValuePair(string, 'foo'); 

console.log(nameValueObj); 

JS Fiddle demo

这当然可以适应更适合您的要求。

因为它是,但是:

  1. 功能检查,这两个参数都存在,并且如果没有,简单地返回false
  2. 创建一个由needle(本例中为'foo')组成的正则表达式模式,后跟一个或多个空白单元,后跟一个单个=字符,后跟一个或多个空格字符。如果空格不一定总是存在,则最好更改为newNeedle = needle + '\\s*\\=\\s*\\w+'+匹配“一个或多个”,*匹配“零个或多个”)。
  3. 从图案创建一个正则表达式,
  4. 测试给定的字符串,看它是否与模式匹配,并且如果是的话,匹配在parsed变量,其存储,
  5. 拆分parsed变量与另一个正则表达式,有效地分割上后跟一个=后跟零或更多的白色空间的零或更多的白色空间的图案,存储该分离的部分在parts数组变量,
  6. 构建从parts变量的对象。
  7. 返回该变量。

更新上面,略有下降,因为两行创建一个正则表达式只是

function getNameValuePair(string, needle) { 
    if (!string || !needle) { 
     return false; 
    } 
    else { 
     var expr = new RegExp(needle + '\\s+\\=\\s+\\w+'), 
      parsed = string.match(expr).join(), 
      parts = parsed.split(/\s+\=\s+/), 
      returnObj = {'name' : parts[0], 'value' : parts[1]}; 

     return returnObj; 
    } 
} 

var string = 'foo = bar; this = is; not = necessary', 
    nameValueObj = getNameValuePair(string, 'foo'); 

console.log(nameValueObj); 

JS Fiddle demo

参考文献:

相关问题