var ss= “
aaaa\nbbb\nccc
我希望 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 的可悲部分之一。
[^]
[.\n]
不要使用(.|[\r\n])而不是.用于多行匹配。
(.|[\r\n])
.
请使用[\s\S]而不是.用于多行匹配
[\s\S]
*?此外,通过使用或+?量词而不是*或来避免不需要的贪婪+。这会产生巨大的性能影响。
*?
+?
*
+
查看我所做的基准测试:https ://jsben.ch/R4Hxu
Using [^]: fastest Using [\s\S]: 0.83% slower Using (.|\r|\n): 96% slower Using (.|[\r\n]): 96% slower
注意:您也可以使用[^],但在下面的评论中已弃用。