为什么这个javascript正则表达式返回false?

时间:2013-10-11 02:28:15

标签: javascript regex

我正在尝试编写一个正则表达式,如果给定的字符串foo以给定的字符串结束,则该正则表达式应返回true。 E.g:

function solution(str, ending)
{
  var pattern = "/" + ending + "$/";
  var regex = new RegExp(pattern, "i");
  console.log( str + ", " + ending + " , " + regex.source);
  return regex.test(str);
}

但是,如果我使用以下输入进行测试:

console.log( solution("samurai", "ai") );

我得到以下控制台输出:

samurai, ai , /ai$/
false 

这个模式对我来说似乎是正确的,那么为什么以'ai'结尾的'samurai'会返回false?

2 个答案:

答案 0 :(得分:2)

如果调用RegExp构造函数,则不需要在模式周围添加/个字符。这仅适用于使用正则表达式文字的情况。

试试这个:

function solution(str, ending)
{
  var pattern = ending + "$";
  var regex = new RegExp(pattern, "i");
  console.log( str + ", " + ending + " , " + regex.source);
  return regex.test(str);
}

答案 1 :(得分:2)

new RegExp("/foo/")/\/foo\//。只有在构建正则表达式文字时才需要斜杠。

从字符串中取出斜杠,它会起作用。

您也可以在没有正则表达式的情况下执行此操作:

str.lastIndexOf(ending) === str.length - ending.length;