【问题标题】:Matching second occurrence in javascript regexp匹配 javascript regexp 中的第二次出现
【发布时间】:2016-10-20 09:55:10
【问题描述】:

我对正则表达式完全陌生,语法让我的大脑融化了,所以基本上我有一个看起来像这样的字符串

randomtext WORD randomtext WORD neededtext BORDERWORD randomtext

wordborderword 彼此不同,其他的东西是不言自明的。

我已经到了/(.?(WORD)){2}((.|\n)*)BORDERWORD/,但它不起作用。

另一个问题是 randomtextneededtext 都包含换行符,我认为我在尝试匹配 neededtext 的匹配组中解决了这个问题((.|\n)*) 但不知道如何使它在第一个中起作用。

任何帮助将不胜感激。

编辑:想出一个解决方法,首先匹配word((.|\n)*)borderword,然后将结果与word((.|\n)*) 匹配完成。看起来不对,但它适用于我的目的。

【问题讨论】:

  • 要包含换行符,请使用[\s\S]*?
  • 我怕被这玩意吹到水里去了。您能否详细说明或更好地为我的场景提供一个工作表达式?
  • 示例字符串中会不会有多个 WORD requiredtext BORDERWORD 实例?

标签: javascript regex


【解决方案1】:
var str = "randomtext WORD randomtext WORD neededtext BORDERWORD randomtext";
var matches = str.match(/^.+? WORD .+? WORD (.+?) BORDERWORD/);
console.log(matches[1]); // neededtext

【讨论】:

    【解决方案2】:

    这应该可行:

    \bWORD\s*((?:(?!WORD)(?:.|\n))*?)\s*BORDERWORD\b
    

    它确保您要提取 WORDBORDERWORD 之间的文本,并且该文本不包含另一个 WORD 序列。

    捕获组 1 将包含所需的文本

    Regex demo

    【讨论】:

    • 该死的,我认为西里尔文字发生了一些奇怪的事情。您的示例将单词交换为我的实际单词https://regex101.com/r/lD6pC7/3 我的实际字符串与单词交换了https://regex101.com/r/lD6pC7/2
    • @mouzfun 你会遇到 JavaScript 正则表达式中的某些 unicode 字符的问题。看看here 了解一些可能的解决方案。
    • 该死,在这一点上我认为使用 .split 可能更容易。它也与 word((.|\n)*)borderword 匹配得很好,这是该死的第一次出现破坏了一切,也许有一些解决方法?另外,randomtext 和 requiredtext 不能同时包含 word 和 borderword
    • 想通了,先匹配word((.|\n)*)borderword,然后将结果匹配word((.|\n)*)就完成了。似乎不对,但它适用于我的目的。
    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多