Lo intenté:
(no|yes)\w{3,6}
pero esto básicamente funciona, pero hay algunas trampas. cuando digo entre 3 a 6 caracteres de largo, no cuenta si o no.
por ejemplo: si tengo una palabra yesss, no coincidirá con ella, aunque tenga solo 5 caracteres. porque comienza a contar después de 'sí'. pero coincidirá si tengo 'yessssss'.
¿Cuál es la expresión regular correcta para ello?
Puedes usar
const matches = text.match(/\b(?=\w*(?:yes|no))\w{3,6}\b/ig);
Detalles :
\b
- límite de palabra(?=\w*(?:yes|no))
- después de cero o más caracteres de palabra, debe haber un yes
o no
\w{3,6}
- caracteres de tres a seis palabras\b
- límite de palabra.Vea una demostración de JavaScript:
const text = "abcno and abcyes and abyesno"; const matches = text.match(/\b(?=\w*(?:yes|no))\w{3,6}\b/ig); console.log(matches);
Si solo desea hacer coincidir palabras que constan de letras:
const text = "abcno and abcyes and abyesno"; const matches = text.match(/\b(?=\p{L}*(?:yes|no))\p{L}{3,6}\b/igu); console.log(matches);
La \p{L}
coincide con cualquier letra Unicode y la u
habilita la compatibilidad con este patrón en un motor de expresiones regulares compatible con ECMAScript 2018+. Si solo trabaja con letras ASCII, reemplace \p{L}
con [a-zA-Z]
y elimine la bandera u
.