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

时间:2015-11-20 02:28:47

标签: javascript regex palindrome

我有一堆字符串可以匹配Bonfire:FreeCodeCamp中的Palindrome 字符串是:

  • 赛车
  • 不是回文
  • 一个男人,一个计划,一条运河。巴拿马
  • 都能跟得上
  • almostomla
  • 我的年龄是0岁,0岁如是。
  • 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();

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

3 个答案:

答案 0 :(得分:1)

最后一个不是回文;你的开头是0_0,最后是0-0,不要删除那些字符。

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

答案 1 :(得分:1)

数组或字符串中的索引从0运行到length-1。但是当您访问字符串末尾的元素时,您将从num开始,而不是num-1。从末尾减去时,需要减去额外的1。所以它应该是:

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

答案 2 :(得分:1)

因此虽然答案很有用,但它们并没有提供正确的正则表达式。射向@Barmar指向正确的方向。这是我的正则表达式。

def index(request):
    products = Product.objects.all()
    context = {'products': products}
    return render(request, 'index.html', context)

FCC中Palindrome的完整代码:

var newstr = str.replace(/[\W_]/g,'').toLowerCase();