正则表达式替换括号中的键,值

时间:2013-10-22 09:51:59

标签: javascript regex object string-matching

我用一些括号的内容来匹配/替换字符串。所以,像这样:

var str = '_(foo, bar)'

应该产生这样的对象:

var obj = {foo: 'bar'}

我试用了这个正则表达式/[a-z]+/g,但没有成功!

我需要的是这样的功能:

var obj = {};
'_(foo, bar)'.replace(/[a-z]+/g, function (match, key, value) {
    obj[key] = value || key;
});

我的正则表达式技能真的受到限制,我不知道如何实现这一点,是吗?

2 个答案:

答案 0 :(得分:3)

var obj = {};
'_(foo)'.replace(/\(([a-z\d]+),*\s*([a-z\d]+)*\)/g, function (match, key, value){
    obj[key] = value || key;
});    
console.log(obj);

<强>输出

{ foo: 'foo' }

您可以在此处查看正则表达式的解释http://regex101.com/r/jG1sY6

答案 1 :(得分:1)

首先这个正则表达式是错的:

/[a-z|\d]+/g

它不会做你认为它正在做的事情,因为它也匹配文字管道字符。

应该用作:

/[a-z\d]+/g

或者只是

/ \ W + /克

您的代码可以是:

str = '_(foo)';
obj = {};
str.replace( /([a-z\d]+)(?:\s*,\s*([a-z\d]+))?/, function (m, k, v) { 
      obj[k] = v||k; return m });

console.log(obj); // Object {foo: "foo"}