我有一些在最新浏览器中运行时运行良好的正则表达式。它具有以下形式:
var re = new RegExp(/(somePattern)/,'g');
它在旧版Chrome上引发错误,错误是:
"从另一个#34开始构建一个RegExp时,不能提供标志;
根据MDN的文档:
从ECMAScript 6开始,新的RegExp(/ ab + c /,' i')不再抛出TypeError("在从另一个&#构造一个RegExp时,不能提供标记#&#t; t 34;)当第一个参数是RegExp并且存在第二个flags参数时。而是创建了参数中的新RegExp。
我并不完全明白这意味着什么。如何更改上面的正则表达式以避免错误?
答案 0 :(得分:4)
您已使用正则表达式文字。
var reg = /abc/g;
这是一个有效的正则表达式。
如果你要使用构造函数(不要,除非你有充分的理由),你应该传递一个字符串,而不是正则表达式。
new RegExp("abc", "g");
答案 1 :(得分:-1)
错误消息表示创建正则表达式后,您无法更改标志。你正在做的基本上是:
new RegExp(new RegExp('(some pattern)'),'g');
引发错误。
你应该做的是:
var re = new RegExp('(some pattern)','g');
或
var re = /(some pattern)/g;