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 .