正则表达式...非捕获组仍然捕获 - JavaScript?

时间:2015-03-16 05:23:53

标签: javascript regex

可能是由于我对自己的误解,但想确认..

var match = '4 bedroom house'.match( /(?:\d+ bedroom)(.*)/i);

据我所知,?:应该意味着当该组用于匹配时,它不会在结果中返回?

但是,当我登录日志match时,我得到了:

["4 bedroom house", " house", index: 0, input: "4 bedroom house"]

我对match [0]不感兴趣,如何排除?

2 个答案:

答案 0 :(得分:0)

(?:..)称为非捕获组,仅执行匹配操作。 match函数反过来返回所有匹配的字符。为了只返回捕获的字符,您需要调用exec函数。

> /(?:\d+ bedroom)(.*)/i.exec('4 bedroom house')[1]
' house'
> /(?:\d+ bedroom\b)\s*(.*)/i.exec('4 bedroom house')[1]
'house'
最后的

[1]有助于打印由组索引1捕获的所有字符。

答案 1 :(得分:0)

当省略 g 标志时,

matchexec的作用相同。 matches数组中的第一个值是完全匹配,因此我不认为在使用match或exec时可以省略第一个数组值。

解决方法省略第一个值:

var match = ('4 bedroom house'.match( /(?:\d+ bedroom)(.*)/i)||[]).slice(1); // [" house"]