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