Pregunta Expresión regular con el alfabeto cirílico


Tengo una función jQuery para conteo de palabras en el campo textarea. Además, excluye todas las palabras, que están cerradas en [[[tripple bracket]]]. Funciona muy bien con el carácter latino, pero tiene un problema con oraciones en cirílico. Supongo que el error es en parte con expresión regular:

$(field).val().replace(/\[\[\[[^\]]*\]\]\]/g, '').match(/\b/g);

Ejemplo con ambos tipos de frases: http://jsfiddle.net/A3cEG/2/

Necesito contar todas las palabras, incluidas las expresiones cirílicas, no solo las palabras en latín. ¿Como hacer eso?


9
2017-08-27 16:41


origen


Respuestas:


JavaScript (al menos las versiones más utilizadas) no es totalmente compatible con Unicode. Es decir, \w solo coincide con letras latinas, dígitos decimales y guiones bajos ([a-zA-Z0-9_]), y \b coincide con el límite entre un carácter de palabra y un carácter sin palabra.

Para encontrar todas las palabras en una cadena de entrada usando latín o cirílico, tendría que hacer algo como esto:

.match(/[\wа-я]+/ig); // where а is the Cyrillic а.

O si lo prefiere:

.match(/[\w\u0430-\u044f]+/ig);

Por supuesto, esto probablemente significará que necesita ajustar un poco su código, ya que aquí coincidirá con todas las palabras en lugar de con los límites de las palabras. Tenga en cuenta que [а-я] coincide con cualquier letra en el 'alfabeto cirílico básico' como se describe aquí. Para hacer coincidir letras fuera de este rango, puede modificar el conjunto de caracteres según sea necesario para incluir esas letras, p. para que coincida con el ruso Ё / ё, use [а-яё].

También tenga en cuenta que su patrón de triple bracket se puede simplificar a:

.replace(/\[{3}[^]]*]{3}/g, '')

Alternativamente, es posible que desee mirar el XRegExp proyecto, que es un proyecto de código abierto para agregar nuevas características al motor de expresiones regulares de JavaScript base, y su Unicode Añadir.


26
2017-08-27 17:01



Preguntas populares