i want get to string in a multiline string that content any specific character and i want get to between two specific staring.
i used this regex and this work but if content have any character (\r \n \t) not work and get null value.
This Wotked
var regex = new RegExp("\-{2}Head(.*)-{2}\/\Head");
var content = "--Head any Code and String --/Head";
var match = regex.exec(content);
This Not Worked
var regex = new RegExp("\-{2}Head(.*)-{2}\/\Head");
var content = "--Head \n any Code \n and String --/Head";
var match = regex.exec(content);
i found a regexer(http://www.regexr.com/v1/) and know i should use Dotall for multiline string but i cant use dotall for regex.exec
thanks.
In 2018, with the ECMA2018 standard implemented in some browsers for the time being, JS regex now supports s
DOTALL modifier:
Browser support
console.log("foo\r\nbar".match(/.+/s)) // => "foo\r\nbar"
Actually, JS native match-all-characters regex construct is
[^]
It means match any character that is not nothing. Other regex flavors would produce a warning or an exception due to an incomplete character class (demo), though it will be totally valid for JavaScript (demo).
The truth is, the [^]
is not portable, and thus is not recommendable unless you want your code to run on JS only.
regex = /--Head([^]*)--\/Head/
To have the same pattern matching any characters in JS and, say, Java, you need to use a workaround illustrated in the other answers: use a character class with two opposite shorthand character classes when portability is key: [\w\W]
, [\d\D]
, [\s\S]
(most commonly used).
NOTE that [^]
is shorter.
javascript doesn't support s
(dotall) modifier. The only workaround is to use a "catch all" class, like [\s\S]
instead of a dot:
regex = new RegExp("\-{2}Head([\\s\\S]*)-{2}\/\Head")
Also note that your expression can be written more concisely using a literal:
regex = /--Head([\s\S]*)--\/Head/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With