【问题标题】:javascript regex to match multiple lines [duplicate]javascript正则表达式匹配多行[重复]
【发布时间】:2015-05-07 12:37:00
【问题描述】:

我的多个字符串如下所示

###
some content
that I need to match
and might have some special character in it such as | <> []
###

我正在尝试获取哈希之间的内容。我尝试过下面的正则表达式,但它与它不匹配并返回 null。

var regex = /### ((.|\n)*) ###/;
var match= regex.exec(aboveContentAsString);
console.log(match[1]);

【问题讨论】:

  • 去掉正则表达式中的空格
  • ### ( 尝试匹配###,后跟一个空格。但是在您的示例文本中,### 后跟换行符,因此不匹配。为什么表达式中有空格?

标签: javascript regex multiple-matches


【解决方案1】:

如果您不希望正则表达式与三个哈希值匹配,请尝试以下操作:
(?![###])[^#]((.|\s)[^#])*。仅当它无法匹配### 时,它才会使用否定的lookbehind 开始匹配。它开始匹配并继续匹配,直到遇到另一个哈希。

【讨论】:

    【解决方案2】:

    Javascript 没有 Dot-Matches-All-Option - 因此只需使用:点或空格。 (首先\s* 以确保您的比赛不以换行符开始 - 不是强制性的。)

    ^###\s*((?:.|\s)*)###$
    

    Debuggex Demo

    【讨论】:

      【解决方案3】:

      JavaScript 缺少 s (singleline/dotall) 正则表达式选项,但您可以通过将 . 替换为 [\s\S] 来解决它(匹配任何作为空格或不是空格的字符,这基本上意味着匹配一切)。另外,让你的量词变得懒惰并去掉模式中的空格,因为 JS 中也没有 x(扩展)选项:

      var regex = /###([\s\S]*?)###/;
      

      例子:

      var input = "###\nsome content\nthat I need to match\nand might have some special character in it such as | <> []\n###";
      
      var regex = /###([\s\S]*?)###/;
      document.getElementById("output").innerText = regex.exec(input)[1];
      &lt;pre id="output"&gt;&lt;/pre&gt;

      您最初的方法可能有效,但我也会在其中添加 \r

      var regex = /###((?:.|[\r\n])*?)###/;
      

      但我更喜欢 [\s\S] 方法,因为它更短且(恕我直言)更易读。

      【讨论】:

      • Sidenode:可以是任何不同的对,例如[\d\D][\w\W],甚至是[^]all but nothing):-)
      • @dognose 注意[^] - 我建议反对它,因为它仅在 JS 中“有效”并且不是标准的正则表达式语法:在其他风格中,] 将被解释为\]并且字符类将未终止(语法错误)。
      • 你说得对。正则表达式提示 #25566 记录:P
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 2016-03-17
      相关资源
      最近更新 更多