2010-01-28 24 views
13

Saludos de JavaScript y gurús de expresiones regulares,JavaScript expresiones regulares - coincide con una serie de números hexadecimales

quiero devolver todos los partidos en una cadena de entrada que son números hexadecimales de 6 dígitos con cualquier cantidad de espacio en blanco en el medio. Por ejemplo, "333333 e1e1e1 f4f435" debe devolver una matriz:

array[0] = 333333 
array[1] = e1e1e1 
array[2] = f4f435 

Aquí es lo que tengo, pero no es del todo derecha- No me queda claro cómo obtener el espacio en blanco opcional ahí, y solo estoy obteniendo un partido

colorValuesArray = colorValues.match (/ [0-9A-Fa-f] {6} /);

Gracias por su ayuda,

-NorthK

Respuesta

19

usar la bandera g a nivel mundial para que coincida con:

palabra
/[0-9A-Fa-f]{6}/g 

Otra buena mejora sería la adición de las fronteras:

/\b[0-9A-Fa-f]{6}\b/g 

Si lo desea, también se puede establecer el indicador i para el caso de coincidencia insensible:

/\b[0-9A-F]{6}\b/gi 
+0

Sin embargo, esto permite _any_ caracteres entre los números, no solo en el espacio en blanco. – bdukes

+0

Gracias Gumbo, ¡eso fue lo que hizo! – northk

+0

Hmmm, creo que cualquiera que permita cualquier caracter entre partidos está bien en este caso; gracias bdukes. – northk

2

intento:

colorValues.match(/[0-9A-Fa-f]{6}/g); 

Nota g la bandera a nivel mundial partido.

0
result = subject.match(/\b[0-9A-Fa-f]{6}\b/g); 

le da un conjunto de todos los números hexadecimales de 6 dígitos en la cadena dada subject.

Los límites de las palabras \b son necesarios para evitar que coincidan partes de números hexadecimales más largos.

+0

Ahh, buen punto Tim, gracias. – northk

2

Depende de la situación, pero I generalmente quiero asegurarme de que mi código no pueda aceptar silenciosamente (e ignorar, o malinterpretar) las entradas incorrectas. Entonces normalmente haría algo como esto.

var arr = s.split(); 
for (var i = 0; i < arr.length; i++) { 
    if (!arr[i].match(/^[0-9A-Fa-f]{6}$/) 
     throw new Error("unexpected junk in string: " + arr[i]); 
    arr[i] = parseInt(arr[i], 16); 
} 
+0

Gracias Jason. en este caso, creo que está bien porque el usuario verá inmediatamente los resultados de forma gráfica de lo que escribieron si escribieron basura :) – northk

Cuestiones relacionadas