我想编写一个 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;
最佳答案
问题是 (.|\n)*
可以超出下一个 ||n||
。您需要避免这种情况,通常是通过在重复中嵌套否定的前瞻:
/\|\|(\d+)(?=\|\|(?:(?!\|\|\d+\|\|)[\s\S])*wonder)/ig;
请注意,我将 (.|\n)
替换为 [\s\S]
,因为前者不会超过其他换行符,例如 \r
和一些 Unicode 的。 [\s\S]
是匹配“任何字符”的标准方式(事实上,在 Javascript 中您也可以使用 [^]
(不是没有字符))。
另请注意,m
修饰符在这里无关紧要,因为它仅影响 ^
和 $
的匹配方式(两者都不属于你的正则表达式)。
对于表达式,在使用重复中的每个字符之前,我们先检查一下它是否不标记 ||n||
的开始。
关于Javascript 正则表达式模式捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17378534/