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

Regexp to replace key, value in brackets

本文关键字:替换 正则表达式      更新时间:2023-09-26

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

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;
});

我的正则表达式技能真的很有限,我不知道如何做到这一点,是吗?

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

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

/[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"}