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]
[.\n]因为.里面没有特殊的含义而不起作用[],只是表示文字.。(.|\n)将是一种指定“任何字符,包括换行符”的方法。如果要匹配所有换行符,则还需要添加\r以包括Windows和经典Mac OS样式的行尾(.|[\r\n])。
.
[]
(.|\n)
\r
(.|[\r\n])
事实证明,这有点麻烦且缓慢(请参阅KrisWebDev的答案以获取详细信息),因此更好的方法是使用匹配所有空白字符和所有非空白字符[\s\S],这将匹配所有内容,并且速度更快且更简单。
[\s\S]
通常,您不应尝试使用正则表达式来匹配实际的HTML标签。例如,请参阅这些问题以获取有关原因的更多信息。
相反,请尝试实际在DOM中搜索所需标签(使用jQuery可以简化此操作,但您始终可以document.getElementsByTagName("pre")使用标准DOM),然后如果需要与内容匹配,则使用regexp搜索这些结果的文本内容。
document.getElementsByTagName("pre")