一尘不染

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

javascript

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的不幸部分之一。


阅读 439

收藏
2020-04-25

共1个答案

一尘不染

[.\n]因为.里面没有特殊的含义而不起作用[],只是表示文字.(.|\n)将是一种指定“任何字符,包括换行符”的方法。如果要匹配所有换行符,则还需要添加\r以包括Windows和经典Mac
OS样式的行尾(.|[\r\n])

事实证明,这有点麻烦且缓慢(请参阅KrisWebDev的答案以获取详细信息),因此更好的方法是使用匹配所有空白字符和所有非空白字符[\s\S],这将匹配所有内容,并且速度更快且更简单。

通常,您不应尝试使用正则表达式来匹配实际的HTML标签。例如,请参阅这些问题以获取有关原因的更多信息。

相反,请尝试实际在DOM中搜索所需标签(使用jQuery可以简化此操作,但您始终可以document.getElementsByTagName("pre")使用标准DOM),然后如果需要与内容匹配,则使用regexp搜索这些结果的文本内容。

2020-04-25