function addregexflags(regx, newflags) {
// add new flags without duplication (won't work in old browsers or IE)
newflags = [...new Set([...regx.flags.split(''), ...newflags.split('')])].join('');
return new RegExp(regx.source, newflags);
}
addregexflags(/try/gi, "gm"); // /try/gim
4条答案
按热度按时间vybvopom1#
使用RegEx source和flags将正则表达式与标志分开。然后用字符串创建一个新的,并设置所需的标志。
dl5txlt92#
你可以写一个方法-
oyxsuwqo3#
下面是一个基于epascarello的答案和评论的函数。你说你有很多regexp需要修改,你可以重新定义引用它们的变量,或者通过函数调用来创建一些新的变量。
如果省略第二个参数,则将使用旧的修饰符。
(这个想法要归功于Davin)。
ebdffaop4#
有一个方面在前面的回答中没有提到,所以加上我的两分钱...
优秀的答案(+1为epascarello!)这里不完全涵盖所有的基础。如果你想泛化这个函数,让它允许在任何正则表达式中添加任何标志:
如果您必须支持不支持Sets和spread运算符的旧浏览器,则需要将字符串的并集手写,因为RegExp构造函数不允许复制标志。