2016-07-31 120 views
0

我想创建一个正则表达式来查找任何不是字母的东西,而且我还想检测字符串中的任何空格。我查看了MDN文档,YouTube视频和stackoverflow问题,但我仍然不明白。你能指出我正确的方向吗?这里是的jsfiddle(它是回文的功能。):https://jsfiddle.net/jn2tutty/71/正则表达式/ javascript

这里是代码:

var regexp = /[^A-Za-z]|\s+|/g;

+0

空格字符不是字母,所以不需要单独测试它们。 – nnnnnn

回答

0

您正则表达式是正确的。您的代码/小提琴不起作用,因为琴弦有不同的外壳(Racecar vs racecar)。

如果您还转换nospace变量为小写字母,它的工作原理:

function palindrome(str) { 
    // Good luck! 
    var nospace = str.replace(" ", "").toLowerCase(); 
           // ^^^^^^^^^^^^^^--- added this 
    var reverse = str.split('').reverse().join(''); 
    var change = reverse.toLowerCase(); 
    console.log(change); 
    var regexp = /[^A-Za-z]|\s+/g; 

    var x = change.replace(regexp, ""); 

    if (nospace == x) { 
    return true; 
    } else { 
    return false; 
    } 
} 
console.log(palindrome("Race car")); 

updated fiddle here


现在,您的代码可以使用其他一些改进。

正则表达式“去掉所有不是字母的东西”正则表达式(/[^A-Za-z]|\s+/g)可以简化为/[^A-Za-z]/g。但你可能根本不需要它(我不知道你的要求,如果你的要求真的希望你删除非字母,而不仅仅是空格),你可能仍然需要它。

您的第一个nospace var只会替换输入中的第一个空格。使用正则表达式可以替代所有这些(如果这真的是你想要的,只能这样做):str.replace(" ", "")变成str.replace(/\s+/g, "")。另外,由于您已经删除了nospace中的空格,因此您可以将其反转(而不是反转输入并稍后删除其空格)。然后比较它。

此外,最后的if/else可以简化为return陈述。最终代码如下所示:

function palindrome(str) { 
    var nospace = str.replace(/\s+/g, "").toLowerCase(); 
    var reverse = nospace.split('').reverse().join('').toLowerCase().replace(/[^a-z]/g, ""); 
    //   optional, depends on your requirements -------------^^^^^^^^^^^^^^^^^^^^^^^^ 
    return nospace === reverse; 
} 
console.log(palindrome("R a c e c a r")); // output: true 

JSFiddle here

+0

是的,好点。我正在考虑用那句话更新答案。我想我现在会,谢谢! – acdcjunior

+0

非常感谢。这非常有帮助。我仍在学习 :) –

1

该方法丢弃除了字母之外的所有内容,并使用for循环来反转字符串。

var str = ' some123 text -&'; 
str = str.replace(/[^a-z]/gi,'').toLowerCase(); 
console.log(str); 
var i,reversed = ''; 
for (i = str.length-1; i > -1; i--) { 
     reversed += str[i]; 
} 
if (str === reversed) { 
     console.log('palindrome'); 
} else { 
     console.log('not a palindrome'); 
}