He estado tratando de usar RegExp en JS para probar una cadena para un cierto recuento de subcadenas. Me gustaría un enfoque puramente RegExp para poder combinarlo con mis otros criterios de búsqueda, pero no he tenido suerte.
Como ejemplo simple, me gustaría probar una palabra si tiene exactamente 2-3 a s.
| caso | cadena de prueba | Resultado Esperado |
|---|---|---|
| 1 | cat | falso |
| 2 | shazam | verdadero |
| 3 | abracadabra | falso |
La mayoría de mis conjeturas en expresiones regulares fallan en el caso 3. Ejemplo: ^(?<!.*a.*)((.*a.*){2,3})(?!.*a.*)$
Podría usar esta expresión regular.
Con cualquier otro carácter, incluidos los espacios en blanco.
^[^a]*(?:a[^a]*){2,3}$
o si usa varias líneas y no quiere abarcar.
^[^a\r\n]*(?:a[^a\r\n]*){2,3}$
^ # Begin [^a]* # optional not-a (?: # Grp a # single a [^a]* # optional not-a ){2,3} # Get 2 or 3 a only $ # End