正则表达式:获取捕获的组的位置列表,而不是匹配

时间:2016-12-09 20:59:41

标签: javascript regex

示例字符串:#ABC ABC@ #ABC@ ABC

示例正则表达式:/(?:[^#])(ABC)(?!@)/g(仅与示例中的ABC匹配)

我需要获得匹配列表[[start,end],...]但不包括第一组,因为JS正则表达式不支持lookbehind。

(注意:假设捕获和未捕获的部分可以是任何长度,而不是像示例中的1或3个字符)

1 个答案:

答案 0 :(得分:1)

不幸的是,没有办法获得组内匹配的索引。

作为解决方法,请确保在必要的捕获组/模式部分之前捕获模式的整个部分。然后,操纵匹配索引和组legnth值,如下所示:

var re = /([^#]|^)ABC(?!@)/g; 
var str = 'ABC #ABC ABC@ #ABC@ ABC';
var pos = [];
while ((m = re.exec(str)) !== null) {
  pos.push([m.index+m[1].length, m.index+m[0].length]);
}
console.log(pos);