Javascript 如何从正则表达式中删除全局标志?
给定用户(开发人员)提供的正则表达式,我需要删除Firefox 38及更高版本上的全局标志(如果存在): 然而,其他地方不支持这一点。因此,我创建了这对函数:Javascript 如何从正则表达式中删除全局标志?,javascript,regex,Javascript,Regex,给定用户(开发人员)提供的正则表达式,我需要删除Firefox 38及更高版本上的全局标志(如果存在): 然而,其他地方不支持这一点。因此,我创建了这对函数: function deGlobal(regex) { if (!regex instanceof RegExp) return regex; if (!regex.global) return regex; var parts = regExpParts(regex); console.log(parts); if (
function deGlobal(regex) {
if (!regex instanceof RegExp) return regex;
if (!regex.global) return regex;
var parts = regExpParts(regex);
console.log(parts);
if (parts) {
return new RegExp(parts.pattern, parts.flags.replace("g", ""));
} else {
return false;
}
}
function regExpParts(regex) {
if (!regex instanceof RegExp) return false;
var regex_string = regex.toString();
var flags = regex_string.substring(regex_string.lastIndexOf('/') + 1);
var pattern = regex_string.substring(1, regex_string.lastIndexOf('/'));
return {
flags: flags,
pattern: pattern
};
}
这对于我所有的测试用例来说都是非常好的,但它似乎是一种非常容易出错的方法
是否存在这些功能无法工作的情况,或者是否存在更好的跨浏览器方法
提琴:您可以将其简化为
newregexp(regex.source,regex.flags);
注释在ES6中引入,因此您可能需要:
if(RegExp.prototype.flags==未定义){
Object.defineProperty(RegExp.prototype,'flags'{
对,,
get:function(){
返回此.toString().match(/[gimuy]*$/)[0];
}
});
}
为什么不使用构造函数删除/覆盖标志
例如,当您从以下代码记录x
时:
let x = /ab(c)/g;
x = new RegExp(x, "");
您应该获得以下输出:
/ab(c)/
您甚至可以覆盖这些标志,如下所示:
let x = /ab(c)/g;
x = new RegExp(x, "mi");
应输出:
/ab(c)/mi
祝你好运。~4年后,这里解释了如何删除和替换正则表达式。对我来说似乎不错。您可能希望将第二行编辑为另一个变量,或者删除第二行
let
onx
。
/ab(c)/mi