正则表达式javascript没有返回括号

时间:2015-02-04 15:58:19

标签: javascript regex

当我尝试在js中执行我的正则表达式时:



var matc = source.match(/sometext(\d+)/g);




我得到的结果是" sometext5615"," sometext5616" ...等 但我想要的是:#34; 5615"," 5616" ...等

你知道如何只获得括号内的内容吗?

2 个答案:

答案 0 :(得分:4)

String.prototype.match有两种不同的行为:

  • 如果正则表达式没有全局g标志,则返回regex.exec(str)。这意味着,如果匹配,您将获得一个数组,其中0键是匹配,键1是第一个捕获组,2键是第二个捕获组,依此类推。

  • 如果正则表达式具有全局g标志,则返回包含所有匹配项的am数组,但没有捕获组。

因此,如果您没有使用全局标记g,则可以使用以下内容获取第一个捕获组

var matc = (source.match(/sometext(\d+)/) || [])[1];

但是,由于您使用全局标志,因此必须手动迭代所有匹配项:

var rg = /sometext(\d+)/g,
    match;
while(match = rg.exec(source)) {
    match[1]; // Do something with it, e.g. push it to an array
}

答案 1 :(得分:1)

JavaScript没有全局匹配的“全部匹配”,因此您无法在此上下文中使用g并且还具有捕获组。最简单的解决方案是删除g,然后使用matc[1]获取5615等。

如果您需要在同一个字符串中匹配其中的多个,那么您最好的选择是"search and don't replace"

var matc = [];
source.replace(/sometext(\d+)/g, function (_, num) {
    matc.push(num);
});