如何在多行上使用JavaScript regex?

如何在多行上使用JavaScript regex?

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

我希望Pre块被捡起来,尽管它跨越了换行符。我以为是“m”旗做的。不会的。

找到答案这里在投递之前。因为我以为我知道JavaScript(读了三本书,工作了几个小时),而且没有现成的解决方案,所以无论如何我都敢发帖。扔石头

所以解决办法是:

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

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

编辑:这,这个是一种复制,但由于它比我的更难找到,所以我不会删除。

它提出[^]作为一个“多线点”。我仍然不明白的是为什么[.\n]不起作用。我猜这是JavaScript的一个令人悲伤的部分。


POPMUISE
浏览 651回答 3
3回答

慕容3067478

[.\n]不起作用是因为.在…里面没有什么特别的意义[],它只是字面意思..&nbsp;(.|\n)是一种指定“任何字符,包括换行符”的方法。如果要匹配所有换行符,则需要添加\r此外,还包括Windows和经典MacOS风格的行尾:(.|[\r\n]).事实证明,这有点麻烦,也很慢,(参见KrisWebDev关于细节的答复),所以更好的方法是匹配所有空白字符和所有非空白字符。[\s\S],这将匹配所有的东西,而且更快更简单。通常,您不应该尝试使用regexp来匹配实际的HTML标记。例如,你看,这些&nbsp;问题有关原因的更多信息。相反,尝试在DOM中搜索所需的标记(使用jQuery使这更容易,但始终可以这样做)。document.getElementsByTagName("pre")使用标准DOM),如果需要与内容匹配,则使用regexp搜索这些结果的文本内容。

互换的青春

[.\n]不起作用,因为[](regex定义;而不只是javascript)指点字符。你可以用(.|\n)(或(.|[\n\r]))相反。
打开App,查看更多内容
随时随地看视频慕课网APP