【问题标题】:Regex pattern for all chars and white space chars up until a double line break所有字符和空白字符的正则表达式模式,直到双换行符
【发布时间】:2019-07-01 22:02:22
【问题描述】:

附上以下文字:

** First Header
------------------------------------------------------------

(https://www.stackoverflow.com) Stack Overflow

Description: Stack Overflow

Google (https://www.google.com)

Description: Google


** Second Header

...如何使用匹配到第二个带有双换行符的标头的正则表达式模式,所以输出如下:

** First Header
------------------------------------------------------------

(https://www.stackoverflow.com) Stack Overflow

Description: Stack Overflow

Google (https://www.google.com)

Description: Google

使用以下正则表达式(将第一个标头与所有字符以及空白字符匹配,因此 \s\S 与随后的正则表达式文字的用法以及双换行符的负前瞻),我觉得我绝对是在正确的轨道上:

RegExp("\\*\\* First Header[\\s\\S]*?(\\r?\\n(?!\\r?\\n))")

...但仅输出:

** First Header

【问题讨论】:

  • 试试/(\*\* First Header[\s\S]*?)(?:\r?\n){3}/,见demo
  • @WiktorStribiżew 很棒,可以动态工作。继续将此作为答案发布,我会将其标记为最佳答案:-)
  • Posted 有解释。

标签: javascript regex google-apps-script


【解决方案1】:

你可以使用

/(\*\* First Header[\s\S]*?)(?:\r?\n){3}/

或者只兼容 JS 正则表达式

/(\*\* First Header[^]*?)(?:\r?\n){3}/

regex demo

详情

  • (\*\* First Header[\s\S]*?) - 第 1 组捕获:
    • \*\* First Header - 文字 ** First Header 子字符串
    • [\s\S]*? - 任何 0+ 个字符,尽可能少
  • (?:\r?\n){3} - 三个可选 CR 后跟 LF 字符(因此,匹配两个有效的空行)。

【讨论】:

    【解决方案2】:

    解决方案可能是:

    RegEx("(\\*\\*[\\s\\S]*)(\\n\\n\\*\\*)")

    提取第一组。

    您可以在https://regex101.com/r/WPN83b/1中查看示例

    【讨论】:

      【解决方案3】:

      下一个正则表达式将起作用:

      /\*[^]+?(?=\s+\*)/

      RegExp("\\*[^]+?(?=\\s+\\*)")

      这是最短的路。

      【讨论】:

      • 永远不要在任何正则表达式中使用(\\s|.)+?。这是一个非常低效的结构,会导致崩溃、超时等。点可以匹配任何字符,具体取决于正则表达式的风格、标志,或者可以成功地替换为相同的结构(例如 JS 中的[^])。在 NFA 正则表达式引擎中,[\s\S] 可用于模拟任何字符匹配行为。
      • 是的,在 this 的情况下。使用 this 字符串。但输入是动态值。
      • 感谢您的提示。我删除了那部分。现在它更短了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 2019-05-17
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      相关资源
      最近更新 更多