![](/img/trans.png)
[英]JavaScript regex.exec() should intended to use an assembled regEx
[英]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修饰符.
也匹配换行符。 javascript中不存在 dotall 修饰符。 解决方法是替换点.
和...
[\S\s]*
你的正则表达式看起来像这样。
var regex = /-{2}Head([\S\s]*)-{2}\/Head/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.