正则表达式/ javascript
我想创建一个正则表达式来查找任何不是字母的东西,而且我还想检测字符串中的任何空格。我查看了MDN文档,YouTube视频和stackoverflow问题,但我仍然不明白。你能指出我正确的方向吗?这里是的jsfiddle(它是回文的功能。):https://jsfiddle.net/jn2tutty/71/正则表达式/ javascript
这里是代码:
var regexp = /[^A-Za-z]|\s+|/g;
您正则表达式是正确的。您的代码/小提琴不起作用,因为琴弦有不同的外壳(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"));
现在,您的代码可以使用其他一些改进。
正则表达式“去掉所有不是字母的东西”正则表达式(/[^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
是的,好点。我正在考虑用那句话更新答案。我想我现在会,谢谢! – acdcjunior
非常感谢。这非常有帮助。我仍在学习 :) –
该方法丢弃除了字母之外的所有内容,并使用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');
}
空格字符不是字母,所以不需要单独测试它们。 – nnnnnn