我正在尝试反转字符串,并过滤掉非字母字符。但由于某种原因,该函数返回一个数组而不是一个字符串。
var palindromes = function(str) {
str = str.toLowerCase().split("").reverse("").join("");
return str.match(/[a-z]/g);
}
如果我通过“foof!”我希望“foof”,但我得到 [“f”,“o”,“o”, “f”] 真正奇怪的是 return str 返回字符串,但当然标点符号仍然存在。所以似乎 match()会导致问题。
答案 0 :(得分:1)
您的意图:过滤掉非字母字符
您应该使用str.replace(/[^a-z]/g, '');
。 [^a-z]
是一个否定字符组,会选择除a-z之外的所有字符,而replace
将允许您将值替换为''
您的功能名称为palindrome
,检查没有意义。可以很容易地检查回文:
return str.toLowerCase().split('').reverse().join('') === str.toLowerCase()
您在原始代码中使用match
,该代码根据传递的标记具有不同的行为。如果传递了全局(g
)标志,它将在数组中提供所有匹配结果。如果未使用g
,它将在数组中以第0位的匹配值给出结果。
str = 'foof'
console.log(str.match(/[a-z]+/))
console.log(str.match(/[a-z]/g))