我有一堆正则表达式,比如 lower = /[az]/ 稍后在我的程序中我需要将其用作 /[az]/g 即。我需要稍后添加“全局”修饰符。那么如何给现有的正则表达式添加修饰符呢?
问问题
8018 次
4 回答
4
这是一个基于 epascarello 的答案和评论的功能。你说你以后有很多正则表达式要修改,你可以重新定义它们引用的变量或通过函数调用创建一些新的变量。
function modifyRegexpFlags(old, mod) {
var newSrc = old.source;
mod = mod || "";
if (!mod) {
mod += (old.global) ? "g" : "";
mod += (old.ignoreCase) ? "i" : "";
mod += (old.multiline) ? "m" : "";
}
return new RegExp(newSrc, mod);
}
var lower = /[a-z]/;
//Some code in-between
lower = modifyRegexpFlags(lower, "g");
如果省略第二个参数,将使用旧的修饰符。
(这个想法归功于 davin)。
于 2012-02-24T20:58:02.687 回答
4
你可以为它写一个方法——
RegExp.prototype.reflag= function(flags){
return RegExp(this.source, flags);
}
于 2012-02-24T21:48:53.817 回答
0
早期答案中没有真正涵盖的一个方面,所以加上我的两分钱......
这里的优秀答案(epascarello 为 +1!)并没有完全涵盖所有基础。如果您想概括该函数以允许将任何标志添加到任何正则表达式:
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
如果您必须支持不支持 Sets 和扩展运算符的旧浏览器,则需要将字符串的并集作为正则表达式构造函数不允许复制标志。
于 2018-08-19T18:45:28.780 回答