确定任意正则表达式是否与整个字符串匹配

时间:2015-04-30 01:00:29

标签: javascript regex

我有一个接受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);
}

是否有更简洁的方法来解决这个问题而不采用字符串操作?

2 个答案:

答案 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