正则表达式,获取子模式

时间:2013-11-08 16:49:56

标签: javascript

为什么我无法抓住子模式?当我希望输出undefined时,控制台会显示hello。如果我将matches[1]更改为matches[0],我会{{hello}}。那么,为什么我不能访问子模式?

var str     = "{{hello}}";
var matches = str.match(/{{(.+)}}/ig);

console.log(matches[1]);

2 个答案:

答案 0 :(得分:3)

尝试:

str.match(/{{(.+)}}/i);

代替。

答案 1 :(得分:2)

好像你正在寻找RegExp.exec的行为。 MDN说明了这一点:

  

如果正则表达式不包含g标志,则返回与regexp.exec(字符串)相同的结果。 ...   如果正则表达式包含g标志,则该方法返回包含所有匹配项的数组。

由于你有g标志,RegExp试图找到所有全局匹配(基本上忽略你的分组),返回['{{hello}}']

如果您删除g标记(或者使用/{{(.+)}}/i.exec(str),则可以返回分组。