Estoy buscando una expresión regular (usando JavaScript) para hacer coincidir todas las palabras de 3 a 6 letras que contienen todas o algunas de las letras de una palabra determinada. Por ejemplo, si mi palabra es "rescatar", entonces debo hacer coincidir "usar", "curar", "reutilizar", "asegurar", etc. Lo que tengo ahora mismo es:
\b(?!\w*(\w)\w*\1)[rescue]{3,6}\b...Y esto funciona, pero para las letras repetidas. No emparejará palabras con 2 e:
r , e , s , c , u , e , deben coincidir como máximo con 1 r , s , c y u , con como máximo 2 e .
Aquí estoy atascado. No soy bueno en estas cosas y es un milagro que haya llegado tan lejos. Esta no es una operación que deba realizar rápidamente o con frecuencia, y la lista de palabras es de solo 20,000 palabras más o menos. No me preocupa la solución más eficiente. Me encantaría un poco de ayuda. Gracias.
No necesita la búsqueda anticipada negativa, ya que está escrita actualmente, esta parte (?!\w*(\w)\w*\1) afirma que lo que está a la derecha no es una palabra char (\w) que puede ocurrir de nuevo con \w*\1
En su lugar, podría afirmar primero la longitud y luego hacer coincidir uno de los caracteres r e s c u e
\b(?!\w*([rescue])\1)(?=\w{3,6}\b)\w*[rescue]\w*\bVea una demostración de regex 101 .
Si la palabra solo puede constar de los caracteres enumerados:
\b(?!\w*([rescue])\1)[rescue]{3,6}\bVea otra demostración de regex 101 .