我正在尝试编写一个正则表达式,如果给定的字符串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?
答案 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;