К сожалению, RegExp
в JavaScript не поддерживает символы Unicode; \w
применяется только к символам ASCII (по модулю некоторых ошибок браузера).
Вы можете использовать символы Юникода в группах, однако, вы можете сделать это, если вы можете выделить каждый набор символов, который вас интересует, как диапазон. eg.:
var r= new RegExp(
'[A-Za-z0-9_\]+|'+ // ASCII letters (no accents)
'[\u3040-\u309F]+|'+ // Hiragana
'[\u30A0-\u30FF]+|'+ // Katakana
'[\u4E00-\u9FFF\uF900-\uFAFF\u3400-\u4DBF]', // Single CJK ideographs
'g');
var nwords= str.match(r).length;
(Это попытка дать более реалистичный подсчет «слов» для японцев, считая каждый прогон одного типа каны как слова. Конечно, это все еще не правильно, но, вероятно, это ближе, чем рассматривать каждый слог как одно слово .)
Очевидно, что есть еще много персонажей, которые нужно учитывать, если вы хотите «сделать это правильно». Будем надеяться, что у вас нет персонажей за пределами основной многоязычной плоскости, например!