js正则表达式向后兼容标志

时间:2016-07-31 16:36:51

标签: javascript regex google-chrome

我有一些在最新浏览器中运行时运行良好的正则表达式。它具有以下形式:

var re = new RegExp(/(somePattern)/,'g');

它在旧版Chrome上引发错误,错误是:

  

"从另一个#34开始构建一个RegExp时,不能提供标志;

根据MDN的文档:

  

从ECMAScript 6开始,新的RegExp(/ ab + c /,' i')不再抛出TypeError("在从另一个&#构造一个RegExp时,不能提供标记#&#t; t 34;)当第一个参数是RegExp并且存在第二个flags参数时。而是创建了参数中的新RegExp。

我并不完全明白这意味着什么。如何更改上面的正则表达式以避免错误?

2 个答案:

答案 0 :(得分:4)

您已使用正则表达式文字。

var reg = /abc/g;

这是一个有效的正则表达式。

如果你要使用构造函数(不要,除非你有充分的理由),你应该传递一个字符串,而不是正则表达式。

new RegExp("abc", "g");

MDN Reference

答案 1 :(得分:-1)

错误消息表示创建正则表达式后,您无法更改标志。你正在做的基本上是:

new RegExp(new RegExp('(some pattern)'),'g');

引发错误。

你应该做的是:

var re = new RegExp('(some pattern)','g');

var re = /(some pattern)/g;