如何过滤出一个字符串,使其仅包含普通 Javascript 中的字母?

Yum*_*ark 4 javascript arrays string loops function

我得到了这个字符串:

var myMessage = "Learning is fun!"
Run Code Online (Sandbox Code Playgroud)

这就是我尝试创建一个仅列出字母的数组(没有空格和“!”)的方法。

var myMessage = "Learning is fun!";
var arr1 = myMessage.split("");

function onlyLetters(array){
    let arr2 = []
    for(let i = 0; i < array.length; i++){
        if(array[i] === "a" || "b" || "c" || "d" || "e" 
        || "f" || "g" || "h" || "i" || "j" || "k" || "l" 
        || "m" || "n" || "o" || "p" || "q" || "r" || "s" 
        || "t" || "u" || "v" || "w" || "x" || "y" || "z"){
          arr2.push(array[i])
        }
    }
    return arr2
}

console.log(onlyLetters(myMessage))
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?另外,是否有列出字母“a”到“z”的简写?

Dha*_*Pai 7

一个简单的方法可能是像这样使用正则表达式

let message = "Learning is fun!";
let onlyLettersArray = message.split('').filter(char => /[a-zA-Z]/.test(char));
console.log(onlyLettersArray)
Run Code Online (Sandbox Code Playgroud)

.filter 接受一个数组并对元素运行一个函数,返回 true 或 false。如果返回 false,则该项目将被删除。正则表达式检查字符是否在 az 或 AZ 范围内

另一种方法是过滤字符然后像这样分割它

let message = "Learning is fun!";
let onlyLettersArray = message.replace(/[^a-z]+/gi, '').split('');
console.log(onlyLettersArray)
Run Code Online (Sandbox Code Playgroud)

编辑:

var myMessage = "Learning is fun!";
var arr1 = myMessage.split("");

function onlyLetters(array){
    let arr2 = []
    for(let i = 0; i < array.length; i++){
        if(/[a-z]/.test(array[i])){ // you can use regex instead of all characters
          arr2.push(array[i])
        }
    }
    return arr2
}

console.log(onlyLetters(myMessage))
Run Code Online (Sandbox Code Playgroud)

更新: 如果您必须替换字符串中的特殊字符而不是字符数组,则可以编写

let message = "Learning is fun!";
let letterMessage = message.replace(/[^a-zA-Z]/gm,"")
console.log(letterMessage)


Run Code Online (Sandbox Code Playgroud)

  • 我认为,由于 OP 是初学者,因此对他们来说帮助他们现有的代码比给他们新的东西更有帮助。 (2认同)