JavaScript:Join()和Match()无法按预期工作

时间:2018-06-17 18:47:57

标签: javascript arrays regex string

我正在尝试反转字符串,并过滤掉非字母字符。但由于某种原因,该函数返回一个数组而不是一个字符串。

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()会导致问题。

1 个答案:

答案 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))