2009-12-31 35 views
5

¿Es posible trabajar con caracteres rusos, en expresiones regulares de JavaScript?
¿Tal vez el uso de \ p {cirílico}?Regex en javascript trabajando con cirílico (ruso) establecer

En caso afirmativo, proporcione un ejemplo básico de uso.

El ejemplo:

var str1 = "абв прв фву"; 
var regexp = new RegExp("[вф]\\b", "g"); 

alert(str1.replace(regexp, "X")); 

que esperan conseguir: абX прX

Respuesta

6

Debería funcionar si sólo guarda el archivo JavaScript en UTF8. Entonces deberías poder ingresar cualquier caracter en una cadena.

edición: acaba de hacer un ejemplo rápido con algunos personajes cryllic de Wikipedia:

var cryllic = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяабвгдеёжзийклмнопрстуфхцчшщъыьэюя'; 
cryllic.match('л.+а')[0]; 
// returns as expected: "лмнопрстуфхцчшщъыьэюяа" 
+0

pero si pruebo esto: var str1 = "абв"; var regexp = new RegExp ("[бв] \ b", "g"); alerta (str1.replace (regexp, "е")); no funciona – samuel

+0

¿Su archivo está codificado 100% UTF-8? ¿Puedes probar con un solo personaje? –

+3

Parece que la palabra límite '\ b' no está funcionando correctamente. Si lo elimino, funciona correctamente, así que intente reemplazarlo por '[]' o algo así. – poke

1

Según this:

JavaScript, que no ofrece ningún apoyo Unicode a través de su RegExp clase, admite \ uFFFF para que coincide con un solo punto de código Unicode como par t de su sintaxis de cadena.

por lo que al menos puede usar puntos de código, pero aparentemente nada más (sin clases).

También mira this duplicate de tu pregunta.

+0

Ese sitio es incorrecto. JavaScript admite Unicode en expresiones regulares. –

+0

No puedo encontrar ninguna referencia más allá de la comparación con puntos de código único como he citado anteriormente, consulte p. Ej. http://www.w3schools.com/jsref/jsref_obj_regexp.asp ¿Tiene una fuente? –

6

Aquí hay un buen artículo sobre JavaScript regular expressions and unicode. Las cadenas en JavaScript son de 16 bits, por lo que las cadenas y los objetos RegExp pueden contener caracteres unicode, pero la mayoría de los caracteres especiales como '\ b', '\ d', '\ w' solo admiten ascii. Entonces, su expresión regular no funciona como se esperaba debido al uso de '\ b'. Parece que tendrás que encontrar una forma diferente de detectar límites de palabras.