重叠固定宽度匹配的正则表达式

时间:2015-08-03 07:41:43

标签: regex

所以说我有一个字符串:

' aaggbb'

我想找到所有类型为aXXXb的组,其中X是任何字符。 我以为正则表达式:

/(a(?:...)b)/ig

可以做到这一点,但它只获得第一个:

'的 aaggb B'

并错过了第二个:

'一个的 aggbb '

我如何同时获得两者?

我搜索了一会儿试图解决这个问题,所以我希望我没有错过任何非常明显的事情。谢谢!

1 个答案:

答案 0 :(得分:4)

如果您正在寻找固定长度的子串,那么您需要使用限制量词(?=(a.{3}b)) (恰好匹配3个符号)来指定它,并在预测中使用捕获来匹配所有子串:

var re = /(?=(a.{3}b))/g; 
var str = 'aaggbb';

while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    document.getElementById("demo").innerHTML += m[1] + "<br/>";
}

请参阅demo

前瞻不消耗字符,并且将启用重叠匹配。 “消费”意味着在前瞻或后视的右括号之后的,正则表达式引擎留在它开始寻找的字符串中的同一个位置:它没有移动。从该位置开始,引擎可以再次开始匹配字符。(来自rexegg.com

<div id="demo" />
#define OUT_PINS            {X2_PIN, PIOC, ID_PIOC, PIO_OUTPUT_0, PIO_DEFAULT}, \
                    {Y2_PIN, PIOC, ID_PIOC, PIO_OUTPUT_0, PIO_DEFAULT}, \
                    {Z2_PIN, PIOC, ID_PIOC, PIO_OUTPUT_0, PIO_DEFAULT}