我希望得到一个多行字符串中的字符串,该字符串包含任何特定字符,并且我希望介于两个特定的凝视之间。
我使用了这个正则表达式和这个工作,但如果内容有任何字符(\ r \ n \ t)不起作用并获得空值。
This Wotked
var regex = new RegExp("\-{2}Head(.*)-{2}\/\Head");
var content = "--Head any Code and String --/Head";
var match = regex.exec(content);
这不行
var regex = new RegExp("\-{2}Head(.*)-{2}\/\Head");
var content = "--Head \n any Code \n and String --/Head";
var match = regex.exec(content);
我发现了一个正则表达式(http://www.regexr.com/v1/)并知道我应该使用Dotall作为多行字符串,但我不能使用dotall来表示regex.exec
感谢。
答案 0 :(得分:26)
javascript不支持s
(dotall)修饰符。唯一的解决方法是使用“catch all”类,例如[\s\S]
而不是点:
regex = new RegExp("\-{2}Head([\\s\\S]*)-{2}\/\Head")
另请注意,您的表达式可以使用文字更简洁地编写:
regex = /--Head([\s\S]*)--\/Head/
答案 1 :(得分:22)
2018年,暂时在某些浏览器中实施了ECMA2018标准,JS regex现在支持s
DOTALL modifier:
JPA

实际上, JS本地匹配所有字符正则表达式构造是
console.log("foo\r\nbar".match(/.+/s)) // => "foo\r\nbar"
这意味着 匹配任何非 的字符。由于字符类不完整(demo),其他正则表达式会产生警告或异常,但它对JavaScript(demo)完全有效。
事实是,[^]
不可移植,因此不推荐使用,除非您希望代码仅在JS上运行。
[^]
要使相同的模式匹配JS中的任何字符,比如Java,您需要使用其他答案中说明的变通方法:当可移植性<时,使用带有两个相反速记字符类的字符类/ strong>是关键:regex = /--Head([^]*)--\/Head/
,[\w\W]
,[\d\D]
(最常用)。
请注意[\s\S]
更短。
答案 2 :(得分:3)
您正在寻找s
修饰符,也称为 dotall 修饰符,它会强制点.
也匹配换行符。 dotall修饰符 不存在于javascript中。解决方法是将点.
替换为...
[\S\s]*
你的正则表达式看起来像这样。
var regex = /-{2}Head([\S\s]*)-{2}\/Head/
答案 3 :(得分:2)
使用catch all character class [\s\S]
,这意味着空格或非空格
var regex = new RegExp("\-{2}Head([\s\S]*)-{2}\/\Head","m");
var content = "--Head \n any Code \n and String --/Head";
var match = regex.exec(content);