2013-08-27 12 views
9

Mam funkcję jQuery do liczenia słów w polu textarea. Ponadto wyklucza wszystkie wyrazy, które są zamknięte w [[[potrójny nawias]]]. Działa świetnie z łacińską postacią, ale ma problem z cyrylicą zdań. Przypuszczam, że błąd jest w części z wyrażenia regularnego:Wyrażenie regularne z alfabetem cyrylicy

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

Przykład zarówno rodzaju zwrotów: http://jsfiddle.net/A3cEG/2/

muszę policzyć wszystkie słowa, w tym wyrażeń cirillic nie tylko słowa po łacinie. Jak to zrobić?

+0

Nie jesteś pewien, co próbujesz zrobić, ale nie powinieneś ".trim(). Split (/ \ s + /). Length" zrobić to dla każdego alfabetu? – Bergi

+0

@Bergi nie, jeśli OP chce policzyć ciąg '" jak ... to "' jako 2 słowa. –

Odpowiedz

24

JavaScript (przynajmniej wersje najczęściej używane) nie obsługuje w pełni Unicode. Oznacza to, że \w dopasowuje tylko litery łacińskie, cyfry dziesiętne i podkreślenia ([a-zA-Z0-9_]), a \b dopasowuje granicę między znakiem słownym i nie-słowem.

Aby znaleźć wszystkie wyrazy w ciąg wejściowy z wykorzystaniem łaciny lub cyrylicy, trzeba by zrobić coś takiego:

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

Lub jeśli wolisz:

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

Oczywiście będzie to prawdopodobnie oznacza, że ​​musisz trochę zmodyfikować swój kod, ponieważ tutaj będzie on dopasowywał wszystkie słowa, a nie granice słów. Zauważ, że [а-я] pasuje do dowolnej litery w "podstawowym alfabecie cyrylicą", zgodnie z opisem here. Aby dopasować litery spoza tego zakresu, możesz odpowiednio zmodyfikować zestaw znaków, aby uwzględnić te litery, np. aby dopasować również rosyjski Ё/ё, użyj [а-яё].

Należy również pamiętać, że wzór potrójnej wspornik można uprościć do:

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

Alternatywnie, można zajrzeć do projektu-który XRegExp jest projektem open-source, aby dodać nowe funkcje do bazy Mechanizm wyrażeń regularnych w języku JavaScript - i jego dodatek o nazwie Unicode.

+1

Chciałbym również zasugerować/[\ wA-яA-Я] +/ig jako "а-я", że są rozróżniane wielkie i małe litery. – Zon

+1

@Zon 'i' na końcu powoduje, że nie jest rozróżniana wielkość liter. Chociaż przyznaję, że prawie na pewno istnieją niektóre przeglądarki, które nie są wystarczająco inteligentne, by radzić sobie z dopasowaniem А-Я w '/ [а-я]/i'! –

+0

Podobnie jak przeglądarka Zon! :) – Zon