我有一个接受RegExp和字符串的函数,需要确定RegExp是否匹配整个字符串,而不仅仅是子字符串。
function completeMatch(regex, str) {
// ???
}
如果我正在编写正则表达式模式,我可以简单地将其包装在^...$
中;但是,其他人拥有这种模式。
我想我可以将RegExp转换为字符串,插入这些字符,然后将其转回RegExp,但这看起来很混乱:
function completeMatch(regex, str) {
var patternStr = regex.toString();
var slashIndex = patternStr.lastIndexOf("/");
var newPattern = "^" + patternStr.substr(1, slashIndex-1) + "$";
var flags = patternStr.substr(slashIndex+1);
var newRegex = new RegExp(newPattern, flags);
return newRegex.test(str);
}
是否有更简洁的方法来解决这个问题而不采用字符串操作?
答案 0 :(得分:2)
"最干净"我能找到的方法是:
function completeMatch(regex, str) {
var newPattern = "^" + regex.source + "$";
var flags = regex.toString().split('/').reverse()[0];
var newRegex = new RegExp(newPattern, flags);
return newRegex.test(str);
}
但正如您所看到的那样,您现在处理的方法非常相似
答案 1 :(得分:1)
我使用过这个功能,这里是:
case