javascript - 如何在多行上使用 JavaScript 正则表达式?

标签 javascript regex

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

我希望 PRE block 被拾取,即使它跨越换行符。我认为'm'标志可以做到这一点。没有。

找到答案here在发布之前。因为我认为我知道 JavaScript(阅读三本书,工作时间)并且 SO 没有现有的解决方案,所以我还是敢于​​发布。 在这里扔石头

所以解决办法是:

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

有没有人有不那么神秘的方法?

编辑:this是重复的,但因为它比我的更难找到,所以我不删除。

它建议将 [^] 作为“多行点”。我仍然不明白为什么 [.\n] 不起作用。猜猜这是 JavaScript 的可悲部分之一..

最佳答案

不要使用 (.|[\r\n]) 代替 . 进行多行匹配。

请使用 [\s\S] 而不是 . 进行多行匹配

另外,在不需要的地方避免贪婪,使用 *?+? 量词代替 *+。这会对性能产生巨大影响。

查看我所做的基准测试:https://jsben.ch/R4Hxu

Using [^]: fastest
Using [\s\S]: 0.83% slower
Using (.|\r|\n): 96% slower
Using (.|[\r\n]): 96% slower

注意:您也可以使用 [^],但在下面的评论中已弃用它。

关于javascript - 如何在多行上使用 JavaScript 正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1979884/

相关文章:

javascript - 如何获取表中某一行的值?

javascript - 是否可以在不调用 getter 的情况下将多个对象与 getter 合并

javascript - 正则表达式在Javascript中获取具有复杂结构的字符串

c++ - 将文本标记为类型、字符串对

javascript - 打印 JavaScript 数组的所有值时遇到困难

javascript - 识别粘贴文本并键入文本

regex - sed中的“-n”实际上是什么意思?

java - 如何在 java 中的 String 的 split() 中使用模式

javascript - 创建嵌套 DIV - 性能提示

javascript - 在 JavaScript 中屏蔽最后 4 位数字