Как определить хотя бы одно (минимально) вхождение в шаблон 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. Решить эту задачу статическими регулярными выражениями НЕ возможно.

→ Ссылка