Регулярное выражение Javascript и японские символы - PullRequest
4 голосов
/ 26 октября 2011

Я использую метод search() строкового объекта, чтобы найти соответствие между регулярным выражением и строкой.

Он отлично работает для английских слов:

"google".search(/\bg/g) // return 0

Но этокод не работает для японских строк:

"アイスランド語".search(/\bア/g) // return -1

Как я могу изменить регулярное выражение, чтобы найти совпадение между японскими строками и регулярным выражением?

Ответы [ 2 ]

4 голосов
/ 26 октября 2011

К сожалению, Javascript - это регулярное выражение только для ASCII.Unicode не поддерживается (я имею в виду, что символы не-ASCII в Unicode не «делятся на классы». Так, например, \d - это всего 0-9).Если вам нужны расширенные регулярные выражения (регулярные выражения Unicode) в Javascript, вы можете попробовать http://xregexp.com/

И мы даже не будем углубляться в проблему суррогатных пар.Символ в Javascript - это точка UTF-16, поэтому он не всегда является «полным» символом Unicode.К счастью, японцы должны быть полностью в BMP (но учтите, что объединение Хана находится в плоскости 2, поэтому каждый из этих символов состоит из 2x символов UTF-16)

Если вы хотите прочитатьЧто-то про Unicode, вы можете начать с Wiki Отображение символов Unicode , например.

3 голосов
/ 26 октября 2011

Проблема в \b. Поскольку \b соответствует только:

  • Перед первым символом в строке, если первый символ является символ слова.
  • После последнего символа в строке, если последний символ - это символ слова.
  • Между двумя символами в строке, где один является символом слова, а другой - не символом слова.

(см .: http://www.regular -expressions.info / wordboundaries.html )

А в JavaScript слово-символ является классом символов [a-zA-Z0-9_] ( ref / Границы слова / ECMA = ASCII).

...