javascript正则表达式匹配多行

时间:2015-03-05 23:23:58

标签: javascript regex multiple-matches

我的多个字符串如下所示

###
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]);

3 个答案:

答案 0 :(得分:8)

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

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

示例:

&#13;
&#13;
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];
&#13;
<pre id="output"></pre>
&#13;
&#13;
&#13;

您的原始方法可行,但我也在其中添加\r

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

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

答案 1 :(得分:0)

Javascript没有 Dot-Matches-All-Option - 因此只需使用:dot OR whitespace。 (首先\s*确保您的匹配不以换行符开头 - 不是强制性的。)

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

Regular expression visualization

Debuggex Demo

答案 2 :(得分:0)

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