【问题标题】:Javascript Regex Pattern Capture [closed]Javascript正则表达式模式捕获[关闭]
【发布时间】:2014-01-12 13:51:41
【问题描述】:

我想编写一个 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;

【问题讨论】:

  • 你不需要正则表达式。请给我们您的 html 示例,其中显示匹配时要返回的键。
  • @DerekHenderson 什么 HTML?

标签: javascript regex


【解决方案1】:

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

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

请注意,我将(.|\n) 替换为[\s\S],因为前者不会越过其他换行符,如\r 和一些Unicode 字符。 [\s\S] 是匹配“任意字符”的标准方式(事实上,在 Javascript 中您也可以使用 [^](不是无字符))。

还请注意,m 修饰符在这里无关紧要,因为它只影响 ^$ 的匹配方式(两者都不是您的正则表达式的一部分)。

至于表达式,在使用重复中的每个字符之前,我们先检查一下,它不会标记||n|| 的开始。

Working demo.

【讨论】:

  • m.buettner 你太棒了。
  • 特别感谢您的解释和工作演示
  • 你介意再帮我一次吗?
  • 在同一个例子中,是否也可以执行以下操作?我还想捕获搜索词的周围 2 个词(左右)。我对此有一个有效的正则表达式
  • (?:[^\|.\s\r\n]*[\s\r\n]+){0,2}(?:[^\s\r\n ]*)wonder(?:[^\s\r\n]*)(?:[\s\r\n]+[^\|.\s\r\n]*){0,2} 现在我想结合两个正则表达式来获取页码和周围的文本。 3、我怎么想你
猜你喜欢
  • 2022-07-29
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2019-01-27
  • 2016-02-10
  • 2013-10-31
相关资源
最近更新 更多