5

我的多个字符串如下所示

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

3 回答 3

18

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

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]方法,因为它更短并且(恕我直言)更具可读性。

于 2015-03-05T23:26:33.633 回答
0

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

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

正则表达式可视化

调试演示

于 2015-03-05T23:35:00.910 回答
0

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

于 2015-03-05T23:56:59.673 回答