Javascript正则表达式模式捕获

时间:2013-06-29 09:04:53

标签: javascript regex

我想编写一个Javascript正则表达式来查找任何给定单词的KEY(页码) 例如,在下面的段落中

Key for Chota = 1
Key for Seven = 1 & 2
Key for wonder =3

(就像发现所有页面上都有一个单词一样)


||1||
Jam Jam jambura jadu tu sikh le aisa
Chota Bheem and Kisna Seven
||2||
One Two Three Bla Bla Bla
Nine Eight Seven Laa Laa Laa
||3||
twinkle twinkle little star
how I wonder what you are

我写了下面的表达,但它没有正常工作

/(?:\|\|)(\d+)(?=\|\|)(?=(.|\n)*wonder)/img;

1 个答案:

答案 0 :(得分:0)

问题是(.|\n)*可以超越下一个||n||。你需要避免这种情况,通常是在重复中嵌套一个负向前瞻:

/\|\|(\d+)(?=\|\|(?:(?!\|\|\d+\|\|)[\s\S])*wonder)/ig;

请注意,我将(.|\n)替换为[\s\S],因为前者不会超过其他换行符,如\r和某些Unicode换行符。 [\s\S]是匹配"任何角色的标准方式" (事实上​​,在Javascript中你也可以使用[^](不是没有字符))。

另请注意,m修饰符在此处无关紧要,因为它仅影响^$匹配的方式(两者都不属于您的正则表达式)。

至于表达式,在重复使用每个字符之前,我们先用前瞻检查,它没有标记||n||的开头。

Working demo.