2011-09-04 17 views
5

¿Hay diferencias entre estos dos?Diferencias entre replace (/ [^ a-z0-9]/gi, '') y replace (/ [^ a-zA-Z0-9]/g, '')

replace(/[^a-z0-9]/gi, ''); 
replace(/[^a-zA-Z0-9]/g, ''); 

Además, ¿hay diferencias significativas en el tiempo utilizando uno u otro?

edición: sobre el rendimiento, hice algunas pruebas http://jsperf.com/myregexp-test

+1

no, hacen lo mismo – sdfadfaasd

+3

Tenga en cuenta lo que realmente hace. Pruebe '.iniciar" .veplace (/ [^ a-z0-9]/gi ''); ' – NullUserException

+0

@NullUserException, pero al final no hay una solución en JS para este problema. Incluso '\ W' hace lo mismo. – xanatos

Respuesta

5

No, por el primero, el i al final hace que el caso de expresiones regulares insensibles sentido de que no importa si la carta que encuentra es mayúscula o minúscula

El segundo coincide con letras mayúsculas y minúsculas, pero se asegura de que sean mayúsculas o minúsculas. Entonces terminas con el mismo resultado.

+1

Tenga en cuenta que esto no es verdad en general. Por ejemplo, 'Σ',' σ' y 'ς' son todos insensibles a mayúsculas y minúsculas, y no podrías obtenerlos todos si simplemente enumeras dos de ellos en una clase de caracteres como' [Σσ] ', ya que eso Extraño el sigma final, 'ς'. Debido a que Javascript no es compatible con Unicode, está jodido aquí, pero en un lenguaje real^H^H^H^El lenguaje anormal, plegado de mayúsculas las recogerá a todas en una coincidencia '/ Σ/i'. – tchrist