Codewars Tutorial — 7kyu: Помогите Бобу считать буквы и цифры.
Мое решение и объяснение ката кодовых войн
Инструкции:
Боб — ленивый человек.
Ему нужно, чтобы вы создали метод, который может определить, сколько букв и цифр содержится в заданной строке.
Пример:
ввод → вывод
«hel2!lo» → 6
«злой .. !» → 6
«!?..А» → 1
Мое решение:
function countLettersAndDigits(input) {
const patt = /[0–9]|[az]|[A–Z]/g;
return (input.match(patt)||[]).length;
}
Объяснение:
const patt = /[0–9]|[az]|[A–Z]/г;
- Сначала я установил const для шаблона, используя RegExp (регулярное выражение - источник w3schools.com)
- [0–9] найдет любые цифры от 0 до 9
- [a-z] найдет любые символы между строчными буквами az
- [A-Z] найдет любые символы между прописными буквами A-Z
- /g выполнит глобальный поиск в строке
return (input.match(patt)||[]).length;
- Затем используйте функцию match() с переменной RegExp patt в качестве аргумента, чтобы найти все совпадающие символы в строке и создать массив со значениями.
- «hel2!lo» → [‘h’, ‘e’, ‘l’, ‘2’, ‘l’, ‘o’]
- Здесь у меня возникла проблема, потому что я думал, что могу использовать свойство .length для подсчета массива, однако продолжал получать сообщение об ошибке NULL …
- Я использовал своего любимого репетитора… АКА Google и нашел этот ответ StackOverflow — https://stackoverflow.com/questions/6715025/regexp-match-length-returns-null-if-not-found/6715069#6715069
return (input.match(patt)||[]).length;
- || это оператор ИЛИ, который будет оценивать слева направо, какие подвыражения верны.
- Теперь свойство .length будет считать массив и давать нужный ответ.
- «hel2!lo» → [‘h’, ‘e’, ‘l’, ‘2’, ‘l’, ‘o’] → 6