Как проверить массив строк на определенный символ
Необходимо преобразовать массив строк(преобразовывается он правильно). Но нужно чтобы преобразования были только со словами("!", "?" и т п не нужно). Как это можно сделать с помощью регулярок?
function pigIt(str){
let buffer = str.split(' ');
for (let i = 0; i < buffer.length; i++) {
if(buffer[i] === /[a-zA-Z]/) {
buffer[i] = buffer[i] + buffer[i][0];
buffer[i] = buffer[i].slice(1) + 'ay';
}
}
return buffer.toString().replace(/,/g, ' ');
}
Пример строки (pigIt('Pig latin is cool !'),'igPay atinlay siay oolcay !')
Ответы (3 шт):
let str = "(pigIt('Pig latin is cool !'),'igPay atinlay siay oolcay !')"
let res = str.match(/\w+/g)
console.log(res)
buffer[i] === /[a-zA-Z]/ — проверка на совпадение так не делается, такое сравнение даст true, только если в buffer[i] такая же регулярка (а там строка).
Регулярка тоже неправильная, она при проверке даст true, если во всей строке есть хотя бы одна буква. Нужно проверить, что от начала строки ^ до конца строки $ есть только последовательность букв + (одна или много).
function pigIt(str){
let buffer = str.split(' ');
for (let i = 0; i < buffer.length; i++) {
if(/^[a-zA-Z]+$/.test(buffer[i])) {
buffer[i] = buffer[i] + buffer[i][0];
buffer[i] = buffer[i].slice(1) + 'ay';
}
}
return buffer.toString().replace(/,/g, ' ');
}
console.log(
pigIt('Pig latin moo? is cool !')
);
Можно сократить до /^[a-z]+$/i (i - insensitive);
Регулярку изменил на
/^[a-z]+$/i- позволяет определять строки, которые состоят только из английских букв без учёта регистраПрименять к массиву
toString, а потомreplace- в вашем случае абсолютно бессмысленно. Вместо этого можно воспользоваться методомjoinУместил всё в "одну строку" :)
const pigIt = (str) => str
.split(' ')
.map(word => /^[a-z]+$/i.test(word) ? (word.slice(1) + word[0] + 'ay') : word)
.join(' ');
console.log(pigIt('Pig latin is cool!'));