如何使用dotall标志为regex.exec()

Hap*_*ser 15 javascript regex

我希望得到一个多行字符串中的字符串,其中包含任何特定字符,我希望在两个特定的凝视之间进行.

我使用这个正则表达式和这项工作,但如果内容有任何字符(\ 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);
Run Code Online (Sandbox Code Playgroud)

这没用

var regex = new RegExp("\-{2}Head(.*)-{2}\/\Head");      
var content = "--Head \n any Code \n and String --/Head";
var match = regex.exec(content);
Run Code Online (Sandbox Code Playgroud)

我发现了一个regexer(http://www.regexr.com/v1/),并知道我应该使用DOTALL多行字符串,但我不能使用DOTALL为regex.exec

谢谢.

geo*_*org 26

javascript不支持s(dotall)修饰符.唯一的解决方法是使用"全部捕获"类,[\s\S]而不是使用点:

regex = new RegExp("\-{2}Head([\\s\\S]*)-{2}\/\Head")
Run Code Online (Sandbox Code Playgroud)

另请注意,您可以使用文字更简洁地编写表达式:

regex = /--Head([\s\S]*)--\/Head/
Run Code Online (Sandbox Code Playgroud)


Wik*_*żew 24

在2018年,暂时在某些浏览器中实现了ECMA2018标准,JS正则表达式现在支持sDOTALL修饰符:

console.log("foo\r\nbar".match(/.+/s)) // => "foo\r\nbar"
Run Code Online (Sandbox Code Playgroud)

实际上,JS本机匹配所有字符正则表达式构造

[^]
Run Code Online (Sandbox Code Playgroud)

这意味着匹配任何不是什么的角色.由于不完整的字符类(演示),其他正则表达式会产生警告或异常,尽管它对JavaScript(演示)完全有效.

事实是,[^]它不可移植,因此除非您希望代码仅在JS上运行,否则不建议使用.

regex = /--Head([^]*)--\/Head/
Run Code Online (Sandbox Code Playgroud)

具有相同的模式匹配的JS,并说,Java的任何字符,您需要使用在其他的答案中所示的解决方法:使用具有两个相对的速记字符类的字符类时的便携性是关键:[\w\W],[\d\D],[\s\S](最常用的) .

注意这个[^]更短.

  • 大!它正在工作.这必须!是正确的答案.@HapyUser请更改已接受的答案. (2认同)