当我尝试在js中执行我的正则表达式时:
var matc = source.match(/sometext(\d+)/g);

我得到的结果是" sometext5615"," sometext5616" ...等 但我想要的是:#34; 5615"," 5616" ...等
你知道如何只获得括号内的内容吗?
答案 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);
});