javascript正则表达式匹配多行

raw*_*ata 4 javascript regex multiple-matches

我的多个字符串如下所示

###
some content
that I need to match
and might have some special character in it such as | <> []
###
Run Code Online (Sandbox Code Playgroud)

我试图得到哈希之间的内容.我试过下面的正则表达式,但它不匹配它并返回null.

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

Luc*_*ski 11

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

var regex = /###([\s\S]*?)###/;
Run Code Online (Sandbox Code Playgroud)

例:

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];
Run Code Online (Sandbox Code Playgroud)
<pre id="output"></pre>
Run Code Online (Sandbox Code Playgroud)

你原来的方法可行,但我也加入\r了:

var regex = /###((?:.|[\r\n])*?)###/;
Run Code Online (Sandbox Code Playgroud)

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

  • Sidenode:可以是任何不同的对,如`[\d\D]`、`[\w\W]`,甚至`[^]`(**所有但没有**):-) (2认同)