Después de años de absorber el conocimiento de la comunidad SO, estoy aquí para hacer mi primera pregunta.
Estoy tratando de crear una expresión regular para un proyecto web de JavaScript para encontrar un número entero (positivo o negativo) con un separador de miles, o simplemente un número entero, en una cadena determinada.
Algunos ejemplos válidos:
561,085 3,894,320 -59,099 1,000 1000 -1000 1 -1 0Ejemplos no válidos:
-01 01393 01,300,00 -04,044He creado esta expresión hasta ahora:
\b(?:[0])|(?:(((-)?[1-9]?\d{2}|\d)((,)?\d{3})|((-)?[1-9]+\d*)))\b(?:[0]) - coincide con un 0 inicial
|(?:(((-)?[1-9?\d{2}|\d)((,)?\d{3}) - o haga coincidir un número inicial del 1 al 9 con una coma y 3 dígitos después
|((-)?[1-9]+\d*))) - o simplemente haga coincidir un número inicial completo de 1-9 sin comas
Creo que funciona en todos los casos, excepto cuando pruebo una cadena con 5 dígitos detrás de un signo menos, por ejemplo, así:
Valor: -01110
En este caso acepta 01110 como coincidencia.
¿Alguien podría ayudarme a descubrir en qué me equivoqué con la expresión?
Tampoco me importaría recibir algunos consejos/comentarios generales sobre cómo hice estallar la cereza de hacer una pregunta aquí, ¡salud!
podrías usar
^(?:0|-?[1-9]\d*|-?[1-9]\d{0,2}(?:,\d{3})+)$Vea una demostración en regex101.com .
Eso significa:
^ # start of the string (?: # open par 0 # zero | # or -?[1-9]\d* # -100 or 234 or -121323232 | # or -?[1-9]\d{0,2}(?:,\d{3})+ # separated by comma ) # close par $ # end of the stringPara usarlo realmente "en la naturaleza" (es decir, en cualquier texto dado), debe ajustar los anclajes a las miradas:
(?<=^|\s)(?:0|-?[1-9]\d*|-?[1-9]\d{0,2}(?:,\d{3})+)(?=\s|$) # ^^1^^ ^^2^^ ^^1^^ significa "ya sea el comienzo de la cadena o algunos espacios en blanco delante de la expresión", ^^2^^ significa "algunos espacios en blanco o el final de la cadena justo después de la expresión".
Vea otra demostración en regex101.com .