Javascript 如何使用正则表达式匹配多个字符串?

Javascript 如何使用正则表达式匹配多个字符串?,javascript,regex,palindrome,Javascript,Regex,Palindrome,我有一堆字符串要匹配篝火:FreeCodeCamp中的回文 字符串是: 眼睛 赛车 不是回文 一个人、一个计划、一条运河。巴拿马 没有 阿尔莫斯托拉 我的年龄是0,0岁 一只眼睛换一只眼睛 0_0(:/-\:)0-0 我的代码: function palindrome(str) { var newstr = str.replace(/[^\w_-]/g,"").toLowerCase(); var num = newstr.length; for(var i=0;i<=

我有一堆字符串要匹配篝火:FreeCodeCamp中的回文 字符串是:

  • 眼睛
  • 赛车
  • 不是回文
  • 一个人、一个计划、一条运河。巴拿马
  • 没有
  • 阿尔莫斯托拉
  • 我的年龄是0,0岁
  • 一只眼睛换一只眼睛
  • 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;
}

几乎匹配所有字符串,但最后一个除外。我哪里出错了?

最后一个不是回文;开头有0_0,结尾有0-0,不删除这些字符


作为一种迂腐的注释,严格来说,这不是一种常规语言。

最后一种不是回文;开头有0_0,结尾有0-0,不删除这些字符


严格来说,这不是一种常规语言。

数组或字符串中的索引从
0
length-1
。但是,当您访问字符串末尾的元素时,您将从
num
,而不是
num-1
。从末尾减去时,需要再减去一个
1
。因此,它应该是:

if (newstr[i] != newstr[num-i-1]) {
    return newstr;
}

数组或字符串中的索引从
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");
函数回文(str){
var newstr=str.replace(/[\W_]/g',).toLowerCase();
var num=newstr.length;

对于(var i=0;i,虽然答案很有用,但它们没有提供正确的正则表达式。请向@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");
函数回文(str){
var newstr=str.replace(/[\W_]/g',).toLowerCase();
var num=newstr.length;

对于(var i=0;iunderscore包含在
\w
中),您不需要在regexp中单独列出它。您在字符串之外进行访问。当
i
为零时,您可以将其与
newstr[num]
进行比较,但最高索引是
newstr[num-1]
。下划线包含在
\w
中,您不需要在regexp中单独列出。您在字符串外部进行访问。当
i
为零时,您可以将其与
newstr[num]
进行比较,但最高索引是
newstr[num-1]