为了账号安全,请及时绑定邮箱和手机立即绑定

如何在多行上使用JavaScript regex?

如何在多行上使用JavaScript regex?

POPMUISE 2019-06-28 10:43:43
如何在多行上使用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的一个令人悲伤的部分。
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

[.\n]不起作用是因为.在…里面没有什么特别的意义[],它只是字面意思.(.|\n)是一种指定“任何字符,包括换行符”的方法。如果要匹配所有换行符,则需要添加\r此外,还包括Windows和经典MacOS风格的行尾:(.|[\r\n]).

事实证明,这有点麻烦,也很慢,(参见KrisWebDev关于细节的答复),所以更好的方法是匹配所有空白字符和所有非空白字符。[\s\S],这将匹配所有的东西,而且更快更简单。

通常,您不应该尝试使用regexp来匹配实际的HTML标记。例如,你看,这些 问题有关原因的更多信息。

相反,尝试在DOM中搜索所需的标记(使用jQuery使这更容易,但始终可以这样做)。document.getElementsByTagName("pre")使用标准DOM),如果需要与内容匹配,则使用regexp搜索这些结果的文本内容。


查看完整回答
反对 回复 2019-06-28
?
互换的青春

TA贡献1797条经验 获得超6个赞

[.\n]不起作用,因为[](regex定义;而不只是javascript)指点字符。你可以用(.|\n)(或(.|[\n\r]))相反。


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 699 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信