繁体   English   中英

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

[英]how to use dotall flag for regex.exec()

我想在包含任何特定字符的多行字符串中输入字符串,并且我想在两个特定的凝视之间进行。

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

谢谢。

2018年,随着ECMA2018标准暂时在部分浏览器中实现,JS正则表达式现在支持s DOTALL修饰符

浏览器支持

 console.log("foo\\r\\nbar".match(/.+/s)) // => "foo\\r\\nbar"

实际上, JS 原生的 match-all-characters 正则表达式构造

[^]

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

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

regex = /--Head([^]*)--\/Head/

要具有与 JS 和 Java 中的任何字符匹配的相同模式,您需要使用其他答案中说明的解决方法:可移植性是关键时,使用具有两个相反速记字符类的字符类[\\w\\W][\\d\\D] , [\\s\\S] (最常用)。

注意[^]更短

javascript 不支持s (dotall) 修饰符。 唯一的解决方法是使用“catch all”类,例如[\\s\\S]而不是点:

regex = new RegExp("\-{2}Head([\\s\\S]*)-{2}\/\Head")

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

regex = /--Head([\s\S]*)--\/Head/

使用捕获所有字符类[\\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);

您正在寻找s修饰符,也称为强制 dot 的dotall修饰符. 也匹配换行符。 中不存在 dotall 修饰符。 解决方法是替换点. 和...

[\S\s]*

你的正则表达式看起来像这样。

var regex = /-{2}Head([\S\s]*)-{2}\/Head/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM