Как определить хотя бы одно (минимально) вхождение в шаблон RegExp на JS
Решаю кату на codeWars https://www.codewars.com/kata/523a86aa4230ebb5420001e1/ Хочу решить через регулярки
Мой код:
function anagrams(word, words) {
let pattern = new RegExp('^[' + word + ']+', 'gi')
return words
.filter(item=>{
console.log(item.replace(pattern,''))
return item
.replace(pattern,'') == false ? true : false;
});
}
console.log(anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer'])).
В результате должно быть два варианта 'racer' и 'carer' . А я получаю еще и 'racar' так как регулярка не учитывает обязательное вхождение . Не могу понять как это исправить(
Ответы (1 шт):
Автор решения: entithat
→ Ссылка
Можно сделать так:
function anagrams(word, words) {
const sw = [...word].sort();
return words.filter(e => ''+[...e].sort() === ''+sw);
}
console.log(anagrams('hello', ['hell', 'lehho', 'heoll', 'helao']));
console.log(anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']));
console.log(anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']));
console.log(anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']));
console.log(anagrams('laser', ['lazing', 'lazy', 'lacer']))
PS. Вместо JSON.strinfigy можно добавить строку, короче выйдет с тем же результатом.
PSS. Решить эту задачу статическими регулярными выражениями НЕ возможно.