28

テキストエリアフィールドの単語カウント用のjQuery関数があります。さらに、[[[三重括弧]]] で閉じられているすべての単語を除外します。ラテン文字ではうまく機能しますが、キリル文字では問題があります。エラーの一部は正規表現にあると思います:

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

両方の種類のフレーズの例: http://jsfiddle.net/A3cEG/2/

ラテン語の単語だけでなく、シリル表現を含むすべての単語を数える必要があります。どうやってするか?

4

4 に答える 4

53

JavaScript (少なくとも最も広く使用されているバージョン) は Unicode を完全にはサポートしていません。つまり、\wラテン文字、10 進数字、アンダースコア ( [a-zA-Z0-9_]) のみに\b一致し、単語文字と単語以外の文字の境界に一致します。

ラテン語またはキリル語を使用して入力文字列内のすべての単語を検索するには、次のようにする必要があります。

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

または、必要に応じて:

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

もちろん、これはおそらくコードを少し調整する必要があることを意味します。ここでは、単語の境界ではなくすべての単語に一致するためです。here で[а-я]説明されているように、「基本的なキリル文字」の任意の文字に一致することに注意してください。この範囲外の文字に一致させるには、必要に応じて文字セットを変更してそれらの文字を含めることができます。たとえば、ロシア語の Á/ё にも一致させるには、 を使用します。[а-яё]

また、トリプルブラケットパターンは次のように簡略化できることに注意してください。

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

または、XRegExpプロジェクト (ベースの JavaScript 正規表現エンジンに新機能を追加するためのオープンソース プロジェクト) とそのUnicodeアドオンを確認することもできます。

于 2013-08-27T17:01:23.777 に答える