javascript 匹配多行的正则表达式

javascript regex to match multiple lines

我的多个字符串如下所示

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

我正在尝试获取散列之间的内容。我试过下面的正则表达式,但它与它不匹配 return null.

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

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

您原来的方法可能行得通,但我也会在其中添加 \r

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

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

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

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

Debuggex Demo

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