var ss= “
var arr= ss.match( /
var arr= ss.match( /
/gm ); alert(arr); //...
Does anyone have a less cryptic way?
Edit: this is a duplicate but since it’s harder to find than mine, I don’t remove.
[.\n]does not work because
.has no special meaning inside of
, it just means a literal
(.|\n)would be a way to specify “any character, including a newline”. If you want to match all newlines, you would need to add
\ras well to include Windows and classic Mac OS style line endings:
That turns out to be somewhat cumbersome, as well as slow, (see KrisWebDev’s answer for details), so a better approach would be to match all whitespace characters and all non-whitespace characters, with
[\s\S], which will match everything, and is faster and simpler.
Instead, try actually searching the DOM for the tag you need (using jQuery makes this easier, but you can always do
document.getElementsByTagName("pre")with the standard DOM), and then search the text content of those results with a regexp if you need to match against the contents.
.for multiline matching.
.for multiline matching
Also, avoid greediness where not needed by using
+?quantifier instead of
+. This can have a huge performance impact.
Using [^]: fastest Using [\s\S]: 0.83% slower Using (.|\r|\n): 96% slower Using (.|[\r\n]): 96% slower
NB: You can also use
[^]but it is deprecated in the below comment.
[.\n]doesn’t work, because dot in
sflag to cause
.to match ‘\n’, see 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
This is a recent addition and will not work in many current environments, for example Node v8.7.0 does not seem to recognise it, but it works in Chromium, and I’m using it in a Typescript test I’m writing and presumably it will become more mainstream as time goes by.
I have tested it (Chrome) and it working for me( both
[^\0]), by changing the dot (
.) by either
[^], because dot doesn’t match line break (See here: 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
In addition to above-said examples, it is an alternate.
\wis for words and
\sis for white spaces