Как отфильтровать строку, содержащую только буквы в ванильном Javascript? - PullRequest
1 голос
/ 06 октября 2019

Мне дали эту строку:

var myMessage = "Learning is fun!"

Вот как я пытался создать массив, содержащий только буквы (без пробелов и "!").

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

Что я делаю неправильно? Кроме того, есть ли сокращение для перечисления букв от "а" до "z"?

Ответы [ 4 ]

0 голосов
/ 06 октября 2019

Поскольку OP - новичок, я бы предложил другое решение, не использующее регулярное выражение

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

function onlyLetters(array){
let arr2 = []
for(let i = 0; i < array.length; i++){
    if(isLetter(array[i])){
      arr2.push(array[i])
    }
}
   return arr2
}

function isLetter(c) {
   return c.toLowerCase() != c.toUpperCase();
}
0 голосов
/ 06 октября 2019

Вы можете просто использовать String.prototype.match, чтобы получить только массив букв.

let arr = "Learning is fun!  1233  ashdgahsgdh".match(/[A-Za-z]/g);
console.log(arr)
0 голосов
/ 06 октября 2019

Вы можете взять строчную строку, разделить ее и проверить каждый символ, если значение больше или равно 'a' и меньше или равно 'z'.

В конце, после фильтрации,вы можете получить строку обратно, соединив массив с пустой строкой в ​​качестве клея.

function onlyLetters(string) {
    return string
        .toLowerCase()
        .split("")
        .filter(c => c >= 'a' && c <= 'z')
        .join('');
}

console.log(onlyLetters("Learning is fun!"));
0 голосов
/ 06 октября 2019

Простым способом может быть использование Regex следующим образом:

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

.filter принимает массив и запускает функцию для элементов, которая возвращает истину или ложь. Элемент удаляется, если возвращается false. Регулярное выражение проверяет, находится ли символ в диапазоне az или AZ

Другой способ - отфильтровать символ и затем разделить его следующим образом:

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

Редактировать:

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

Обновление: Если вместо массива символов вам нужно заменить специальные символы в строке, вы можете написать

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


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...