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

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

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

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

(注意:假设捕捉和未捕捉的部分可以是任意长度的,不仅仅是例子中的1或3个字符)


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

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

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);
链接地址: http://www.djcxy.com/p/12983.html

上一篇: regex: get list of the locations of captured groups, not matches

下一篇: Ruby regex specify length of captured group