aka*_*ppi 248 javascript regex
var ss= "<pre>aaaa\nbbb\nccc</pre>ddd";
var arr= ss.match( /<pre.*?<\/pre>/gm );
alert(arr); // null
Run Code Online (Sandbox Code Playgroud)
我想要接收PRE块,即使它跨越换行符.我以为'米'旗就是这么做的.才不是.
找到答案在这里发布之前.我以为我认识JavaScript(读了三本书,工作了几个小时),而且现在没有现成的解决方案,我敢于发帖.在这里扔石头
所以解决方案是:
var ss= "<pre>aaaa\nbbb\nccc</pre>ddd";
var arr= ss.match( /<pre[\s\S]*?<\/pre>/gm );
alert(arr); // <pre>...</pre> :)
Run Code Online (Sandbox Code Playgroud)
有人有一个不那么神秘的方式吗?
编辑:这是一个副本,但因为它比我的更难找到,我不删除.
它建议[^]
作为"多线点".我仍然不明白为什么[.\n]
不起作用.猜猜这是JavaScript的悲伤部分之一..
Kri*_*Dev 313
不要使用(.|[\r\n])
而不是.
多线匹配.
请使用[\s\S]
而不是.
多行匹配
此外,避免使用*?
或+?
量词不需要的贪婪而不是*
或+
.这可能会产生巨大的性能影响.
请参阅我制作的基准:http://jsperf.com/javascript-multiline-regexp-workarounds
Using [^]: fastest
Using [\s\S]: 0.83% slower
Using (.|\r|\n): 96% slower
Using (.|[\r\n]): 96% slower
Run Code Online (Sandbox Code Playgroud)
注意:您也可以使用,[^]
但在以下评论中已弃用.
Bri*_*ell 219
[.\n]
不起作用,因为.
里面没有特殊意义[]
,它只是意味着文字.
.(.|\n)
将是一种指定"任何字符,包括换行符"的方法.如果您想匹配所有换行符,您还需要添加\r
以包含Windows和经典Mac OS样式行结尾:(.|[\r\n])
.
事实证明这有点麻烦,而且速度慢(请参阅KrisWebDev的详细解答),所以更好的方法是匹配所有空白字符和所有非空白字符[\s\S]
,它们将匹配所有内容,并且更快,简单.
通常,您不应该尝试使用正则表达式来匹配实际的HTML标记.例如,请参阅这些 问题以获取有关原因的更多信息.
相反,尝试实际搜索DOM以获取所需的标记(使用jQuery使这更容易,但您可以document.getElementsByTagName("pre")
使用标准DOM),然后如果需要匹配内容,则使用正则表达式搜索这些结果的文本内容.
Hus*_*012 20
现在有 s(单行)修饰符,它可以让点也匹配新行:) \s 也将匹配新行:D
只需在斜杠后面添加 s 即可
/<pre>.*?<\/pre>/gms
Run Code Online (Sandbox Code Playgroud)
Nee*_*eek 16
你没有指定你的环境和Javascript版本(ECMAscript),我发现这篇文章是从2009年开始的,但为了完整起见,随着ECMA2018的发布,我们现在可以使用该s
标志.
来匹配'\n',请参阅https ://stackoverflow.com/a/36006948/141801
从而:
let s = 'I am a string\nover several\nlines.';
console.log('String: "' + s + '".');
let r = /string.*several.*lines/s; // Note 's' modifier
console.log('Match? ' + r.test(s); // 'test' returns true
Run Code Online (Sandbox Code Playgroud)
这是最近添加的,并且在许多当前环境中都不起作用,例如Node v8.7.0似乎无法识别它,但它在Chromium中工作,我在我正在编写的Typescript测试中使用它,并且可能是它随着时间的推移,它将变得更加主流.
Y. *_*ham 11
[.\n]
不起作用,因为dot in []
(通过正则表达式定义;不仅仅是javascript)表示点字符.您可以使用(.|\n)
(或(.|[\n\r])
)代替.
我测试了它(Chrome)并且它适用于我(两者[^]
和[^\0]
),通过更改点(.
)[^\0]
或者[^]
,因为点与换行符不匹配(参见这里:http://www.regular-expressions.info/dot.html).
var ss= "<pre>aaaa\nbbb\nccc</pre>ddd";
var arr= ss.match( /<pre[^\0]*?<\/pre>/gm );
alert(arr); //Working
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
152062 次 |
最近记录: |