Tengo esta expresión regular gracias a otro maravilloso usuario de StackOverflow

/(?:-\d+)*/g

Quiero que coincida con cosas como

133-134-454-58819860
12-13-876-1234346

Cada bloque (números entre -'s) podría tener cualquier longitud pero definitivamente solo serán números y solo habrá 4 bloques.

Pero actualmente coincide con cosas como -2008

Soy realmente malo en expresiones regulares y estoy luchando, por favor ayuda. Estoy en JavaScript si eso es útil.

1
Ben Shelock 13 sep. 2009 a las 12:35

4 respuestas

La mejor respuesta

Prueba esto

/ (?: \ d + -) {3} \ d + /

2
Anton Hansson 13 sep. 2009 a las 08:40

En cuanto a verificar el número de coincidencias, lo siguiente debería funcionar:

alert(
  "133-134-454-58819860".match(/^(\d+-){3}\d+$/g).join("\n")
 );

La función de coincidencia de las cadenas de JavaScript toma un objeto de expresión regular como parámetro. Devuelve una serie de coincidencias, en el orden en que se encontraron dentro de la cadena.

0
David Andres 13 sep. 2009 a las 08:46

Si desea hacer coincidir exactamente cuatro cadenas numéricas separadas por guiones, querrá esto:

/^\d+-\d+-\d+-\d+$/

^ Y $ son anclas para restringir la coincidencia al principio y al final de la cadena. Deberá eliminarlos si está buscando una cadena con otro texto (por ejemplo, "bla, bla, 12-12-12-12, bla, bla").

1
bobbymcr 13 sep. 2009 a las 08:41
/(?:-\d+)*/g

Se descompone en:

/    about to begin a regex

(    the following is a group

?:   but don't bother storing what this group finds as its own result

-    it must have a dash

\d   followed by digit(s)...

+    at least one digit, perhaps more

)    Im done with the group

*    But get me as many groups like that as you could

/    done with the regex

Entonces encontrará todos los grupos como este -0000 pero no así -000-000

Mientras escribían esto, otros usuarios más rápidos publicaron sus propias expresiones regulares. Pero todavía estoy publicando, así que sigues la lógica.

6
SamGoody 13 sep. 2009 a las 08:46