2012-05-31 9 views
12

tengo una larga cadena en javascript comoRegex string match?

var string = 'abc234832748374asdf7943278934haskhjd';

Estoy tratando de igualar como

abc234832748374 - es decir - He tratado como

string.match(\abc[^abc]|\def[^def]|) pero eso no me pongo las dos cadenas porque necesito números después de ellos?

Básicamente necesito abc + 8 caracteres después y def los caracteres 8-11 después? Cómo puedo hacer esto ?

Respuesta

25

Si desea que las cadenas literales o abcdef seguidos de 8-11 dígitos, se necesita algo así como:

(abc|def)[0-9]{8,11} 

puede probar aquí: http://www.regular-expressions.info/javascriptexample.html

Tenga en cuenta que, si no se desea hacer coincidir más de un 11 di gits, necesitará un ancla (o [^0-9]) al final de la cadena. Si solo tiene 8 o más, puede reemplazar {8,11} con {8}.

1

Puede hacer coincidir abc[0-9]{8} con la cadena abc seguido de 8 dígitos.

Si los tres primeros caracteres son arbitrarias, y 8-11 dígitos después de eso, tratar [a-z]{3}[0-9]{8,11}

1

Utilizar el siguiente expresión regular para conseguir la coincidencia exacta,

string.match(/(abc|def)\d{8,11}/g); 

termina con g

"g" para el mundial

"i" para ignoreCase

"m" para multilínea

9

Para elaborar en una respuesta ya publicado, es necesario un partido mundial, de la siguiente manera:

var matches = string.match(/(abc|def)\d{8,11}/g); 

Esto corresponderá con todos los subconjuntos de la cadena que:

  • comienzan con "abc" o "def". Esta es la parte "(abc | def)"
  • Están seguidas por 8-11 dígitos. Esta es la parte "\ d {8,11}". \ d coincide con los dígitos.

La bandera "g" (global) le ofrece una lista de todas las coincidencias, en lugar de solo la primera.

En su pregunta, ha solicitado 8-11 caracteres en lugar de dígitos. Si no importa si son dígitos u otros caracteres, puede usar "." en lugar de "\ d".

también notar que cada uno de sus partidos ejemplo, tienen más de 11 caracteres que siguen al "abc" o "def". Si cualquier número de dígitos va a hacer, a continuación, las siguientes de expresiones regulares pueden ser más adecuados:

  • cualquier número de dígitos - var matches = string.match(/(abc|def)\d*/g);
  • al menos un dígito - var matches = string.match(/(abc|def)\d+/g);
  • Al menos 8 dígitos - var matches = string.match(/(abc|def)\d{8,}/g);
+1

1 a tomarse el tiempo para escribir una explicación! –