为什么String#match()结果不包含捕获的值?

时间:2016-09-16 11:04:10

标签: javascript regex

我试图从javascript中的最简单的JSON中提取一个值。

搜索后我发现match是最接近的解决方案。

但是在对RegExp进行分组的情况下尝试此操作时,它不会给出合适的结果。

我的对象是{"a":"one"} 我正在建立的正则表达式是new RegExp('{"a":"(.*)"}','g')

我的结果

'{"a":"one"}'.match(new RegExp('{"a":"(.*)"}','g'))["{"a":"one"}"]

'{"a":"one"}'.match(new RegExp('{"a":"(.*)"}'.replace(/([+?^=!:${}|\[\]\/\\])/g, "\\$1"),'g')) 

也是["{"a":"one"}"]

我希望结果应该是["{"a":"one"}", "one"]

这里发生了什么错误?

1 个答案:

答案 0 :(得分:2)

请参阅String#match() reference

  

如果正则表达式包含g标志,则该方法返回一个包含所有匹配的子字符串而不是匹配对象的数组。捕获的组不会被退回。

删除g修饰符以获得预期结果。



console.log(
   '{"a":"one"}'.match(/{"a":"(.*)"}/)
);