在此设定一个函数,该函数可以充分测试所有相关的正则属性,并确保它是对象的正确类型:
function regexSame(r1, r2) {
if (r1 instanceof RegExp && r2 instanceof RegExp) {
var props = ["global", "multiline", "ignoreCase", "source", "dotAll", "sticky", "unicode"];
for (var i = 0; i < props.length; i++) {
var prop = props[i];
if (r1[prop] !== r2[prop]) {
return false;
}
}
return true;
}
return false;
}
此外,由于国旗有时被添加到有新特征的正方格对象上(2012年最初答复以来,上述代码已经更新到2019年),因此,这里的版本更能证明未来添加的国旗,因为它与任何国旗相比,而不是寻找特定的旗帜。在比较之前,它会区分国旗,以允许在如何指定正方格时出现小的差别,而这种差别实际上不会改变功能。
function regexSame(r1, r2) {
return r1 instanceof RegExp &&
r2 instanceof RegExp &&
r1.source === r2.source &&
r1.flags.split("").sort().join("") === r2.flags.split("").sort().join("");
}