小编典典

如何在多行上使用 JavaScript 正则表达式?

all

var ss= “

aaaa\nbbb\nccc
ddd”;
var arr= ss.match( /<pre.*?<\/pre>/gm );
alert(arr); // null

我希望 PRE 块被拾取,即使它跨越换行符。我认为’m’标志可以做到这一点。才不是。

所以解决方案是:

var ss= "<pre>aaaa\nbbb\nccc</pre>ddd";
var arr= ss.match( /<pre[\s\S]*?<\/pre>/gm );
alert(arr);     // <pre>...</pre> :)

有没有人有一个不那么神秘的方式?

它建议[^]作为“多线点”。我仍然不明白的是为什么[.\n]不起作用。猜猜这是 JavaScript 的可悲部分之一。


阅读 89

收藏
2022-04-15

共1个答案

小编典典

不要使用(.|[\r\n])而不是.用于多行匹配。

请使用[\s\S]而不是.用于多行匹配

*?此外,通过使用或+?量词而不是*或来避免不需要的贪婪+。这会产生巨大的性能影响。

查看我所做的基准测试:https ://jsben.ch/R4Hxu

Using [^]: fastest
Using [\s\S]: 0.83% slower
Using (.|\r|\n): 96% slower
Using (.|[\r\n]): 96% slower

注意:您也可以使用[^],但在下面的评论中已弃用。

2022-04-15