0

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

var str = '_(foo, bar)'

应该产生这样的对象:

var obj = {foo: 'bar'}

我用这个 regexp 尝试过/[a-z]+/g,但没有成功!

我需要的是这样的功能:

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

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

4

2 回答 2

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

于 2013-10-22T09:58:51.033 回答
1

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

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

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

它应该用作:

/[a-z\d]+/g

或者干脆

/\w+/g

您的代码可以是:

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"}
于 2013-10-22T10:04:49.273 回答