2010-09-12 13 views
5

Tengo una expresión regular de JavaScript que básicamente encuentra palabras de dos letras. El problema parece ser que interpreta caracteres acentuados como límites de palabras. De hecho, parece que¿Cómo puedo hacer una expresión regular que tenga en cuenta los caracteres acentuados?

Un límite de palabra ("\ b") es un punto entre dos personajes que tiene un "\ w" en un lado de ella y un "\ W" en la otra lado de la misma (en cualquier orden), contando los caracteres imaginarios de al comienzo y al final de la cadena como que coincide con "\ W". AS3 RegExp to match words with boundry type characters in them

Y puesto

\ w coincide con cualquier carácter alfanumérico (caracteres de palabra) que incluye subrayado (abreviatura de [a-zA-Z0-9_]). \ W coincide con cualquier no-palabra caracteres (abreviatura de [^ a-zA-Z0-9_]) http://www.javascriptkit.com/javatutors/redev2.shtml

caracteres acentuados, obviamente, no se tienen en cuenta. Esto se convierte en un problema con palabras como Montréal. Si el é se considera un límite de palabra, entonces al es una palabra de dos letras. He intentado hacer mi propia definición de un límite de palabras que permitiría caracteres acentuados, pero al ver que un límite de palabras no es ni siquiera un carácter, no sé exactamente cómo encontrarlo ...

Cualquier ¿ayuda?

Este es el código JavaScript relevante, que busca userInput y encuentra palabras de dos letras usando la expresión regular de re_state:

var re_state = new RegExp("\\b([a-z]{2})[,]?\\b", "mi"); 
var match_state = re_state.exec(userInput); 
document.getElementById("state").value = (match_state)?match_state[1]:""; 

Respuesta

-3

se ha marcado JavaScript para utilizar caracteres no ASCII? Aquí es una página que propone la creación Javascript para usar UTF-8: http://blogs.oracle.com/shankar/entry/how_to_handle_utf_8

Dice:

añadir un atributo charset (charset = "UTF-8") a sus etiquetas de script en la página principal:

script type="text/javascript" src="[path]/myscript.js" charset="utf-8" 
+0

Eso no cambia nada ... – Shawn

+0

Sí, el atributo de tipo no es ni siquiera en HTML5, ya que ISN No es compatible con navegadores, es un error que las personas cometieron al interpretar la especificación. La metaetiqueta del juego de caracteres funciona, pero el juego de caracteres en los enlaces no es real. –

+0

@ Rich Bradshaw: Tengo en mi sección de encabezado. ¿Es eso lo que quieres decir? – Shawn

4

Mientras expresiones regulares de JavaScript reconoce los caracteres no ASCII en algunos casos (como \s), es irremediablemente inadecuado cuando se trata de \w y \b. Si desea que funcionen con algo más que los caracteres de palabras ASCII, deberá usar un idioma diferente o instalar la biblioteca XRegExp de Steve Levithan con el Unicode plugin.

Por cierto, hay un error en su expresión regular.Usted tiene un \b después de la coma final opcional, pero debe estar al frente:

"\\b([a-z]{2})\\b,?" 

También elimina los corchetes; solo los necesitarías si la coma tuviera un significado especial en expresiones regulares, que no es así. Pero sospecho que no es necesario que coincida con la coma; \b debería ser suficiente para asegurarse de que está al final de la palabra. Y si usted no necesita la coma, no es necesario el grupo de captura, ya sea:

"\\b[a-z]{2}\\b" 
+0

@ Alan Moore: ¿Cuál es la diferencia entre usar el literal y el constructor? La diferencia que encontré es que si uso el constructor, puedo agregar las coincidencias de las expresiones regulares anteriores a mi regexp ... por ejemplo: var re_address = new RegExp (match_buildingNumber [0] + match_street [0] + match_city [0] + "?", "mi"); Ese tipo de cosas, que es, para mi conocimiento, imposible con una expresión regular literal ... – Shawn

+0

De acuerdo, si tiene una buena razón para usar el constructor, utilícelo. Solo quería asegurarme de que conocía la opción literal de expresión regular. –

+0

@ Alan Moore: ¡bien, gracias! Pero todavía estoy un poco curioso. ¿Cuál es la diferencia entre los dos? ¿Por qué debería uno preferir usar el literal cuando sea posible? Además, descargué XRegExp y el complemento Unicode, pero todavía no veo cómo usarlo para lo que quiero. Supongo que habría una Lm (letra modificada) en alguna parte allí? – Shawn

Cuestiones relacionadas