如何使用正则表达式匹配多个字符串?
问题描述:
我有一大堆的字符串相匹配的篝火:回文中FreeCodeCamp 字符串是:如何使用正则表达式匹配多个字符串?
- 眼
- 赛车
- 不是一个回文
- 一个男人,一个计划,一个运河。*
- 没了
- almostomla
- 我的年龄是0,0 SI EGA YM。
- 1只眼的1只眼。
- 0_0(/ - \ :) 0-0
我的代码:
function palindrome(str) {
var newstr = str.replace(/[^\w_-]/g,"").toLowerCase();
var num = newstr.length;
for(var i=0;i<=Math.floor(num/2);i++)
{
if(newstr[i]!==newstr[num-i])
{
return newstr;
}
}
return true;
}
什么能if语句是错误的?字符串的返回是好的..只是不能把我的头围绕这些正则表达式?
我现在的正则表达式:
var newstr = str.replace(/[^\w_-]/g,"").toLowerCase();
匹配几乎所有的字符串,但最后一个。我哪里错了?
答
最后一个不是回文;你开始时有0_0,最后是0-0,并且不要擦除这些字符。作为一个迂腐的笔记,严格地说,这不是一种常规的语言。
答
数组或字符串中的索引从0
运行到length-1
。但是当您访问字符串末尾的元素时,您将从num
开始,而不是num-1
。从最后减去时需要减去额外的1
。所以它应该是:
if (newstr[i] != newstr[num-i-1]) {
return newstr;
}
答
所以虽然答案是有用的,他们没有提供正确的正则表达式。向@Barmar发出指出正确的方向。这是我的正则表达式。
var newstr = str.replace(/[\W_]/g,'').toLowerCase();
为回文在FCC的完整代码:
function palindrome(str) {
var newstr = str.replace(/[\W_]/g,'').toLowerCase();
var num = newstr.length;
for(var i=0;i<=Math.floor(num/2);i++)
{
if(newstr[i]!==newstr[num-1-i])
{
return false;
}
}
return true;
}
palindrome("0_0 (: /-\ :) 0-0");
下划线包含在'\ w',你不需要列出单独的正则表达式。 – Barmar
您正在字符串之外访问。当'i'为零时,将它与'newstr [num]'进行比较,但最高索引是'newstr [num-1]'。 – Barmar