示例字符串:#ABC ABC@ #ABC@ ABC
示例正则表达式:/(?:[^#])(ABC)(?!@)/g
(仅与示例中的ABC
匹配)
我需要获得匹配列表[[start,end],...]但不包括第一组,因为JS正则表达式不支持lookbehind。
(注意:假设捕获和未捕获的部分可以是任何长度,而不是像示例中的1或3个字符)
答案 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);