我用一些括号的内容来匹配/替换字符串。所以,像这样:
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;
});
我的正则表达式技能真的受到限制,我不知道如何实现这一点,是吗?
答案 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"}