var ss= "<pre>aaaa\nbbb\nccc</pre>ddd";
var arr= ss.match( /<pre.*?<\/pre>/gm );
alert(arr); // null
我希望 PRE 块被拾取,即使它跨越换行符。我认为“m”标志可以做到这一点。才不是。
找到了答案here http://blog.simonwillison.net/post/57956777104/newlines在发布之前。因为我以为我了解 JavaScript(读了三本书,工作时间)并且 SO 上没有现有的解决方案,所以我无论如何都敢发帖。在这里扔石头
所以解决办法是:
var ss= "<pre>aaaa\nbbb\nccc</pre>ddd";
var arr= ss.match( /<pre[\s\S]*?<\/pre>/gm );
alert(arr); // <pre>...</pre> :)
有人有更不那么神秘的方法吗?
Edit: this https://stackoverflow.com/questions/1387116/matching-multiline-patterns是重复的,但由于它比我的更难找到,所以我不删除。
它建议[^]
作为“多线点”。我仍然不明白的是为什么[.\n]
不起作用。我猜这是 JavaScript 的悲伤部分之一..
不要使用(.|[\r\n])
代替.
用于多行匹配。
DO use [\s\S]
代替.
用于多行匹配
另外,在不需要的地方使用避免贪婪*?
or +?
量词代替*
or +
。这会对性能产生巨大的影响。
看看我做的基准:https://jsben.ch/R4Hxu https://jsben.ch/R4Hxu
Using [^]: fastest
Using [\s\S]: 0.83% slower
Using (.|\r|\n): 96% slower
Using (.|[\r\n]): 96% slower
注意:您还可以使用[^]
但它在下面的评论中已被弃用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)