Javascript unicode (греческие) регулярные выражения

Я хотел бы использовать это регулярное выражение new RegExp ( "\ b" + pat + "\ b" ) в греческом тексте, но метасимвол "\ b" поддерживает только символы ASCII.

Я попробовал XregExp, но мне не удалось решить проблему.

Приветствуются любые предложения.

Ответ 1

Я думаю, что это было полезно для вашего ответа.

<script src="xregexp.js"></script>
<script src="xregexp-unicode-base.js"></script>
<script>
    var unicodeWord = XRegExp("^\\p{L}+$");

    unicodeWord.test("Русский"); // true
    unicodeWord.test("日本語"); // true
    unicodeWord.test("العربية"); // true
</script>

<!-- \p{L} is included in the base script, but other categories, scripts,
and blocks require token packages -->
<script src="xregexp-unicode-scripts.js"></script>
<script>
    XRegExp("^\\p{Katakana}+$").test("カタカナ"); // true
</script>

Пожалуйста, обратитесь к следующему местоположению: http://xregexp.com/plugins/

Ответ 2

Итак, ответ просто, что вы не можете использовать собственные механизмы JavaScript или любую библиотеку, которая использует эти механизмы для соответствия словам так, как вы хотите. Как вы уже сказали, \b соответствует словам. Слова должны состоять из словных символов. И в JavaScript (и на самом деле другие символы регулярных выражений - a-z, A-Z, 0-9 и _. Но многие другие языки просто реализуют метасимвол \b по-разному, как это делает JavaScript.

Ответ "JavaScript не поддерживает Unicode" немного упрощен и на самом деле совершенно неправилен. JavaScript просто не использует юникод для классов символов. Если JavaScript не поддерживает unicode, вы даже не сможете использовать символы Unicode в строковых литералах, и, конечно же, это возможно в JavaScript.

В соответствии с ECMA 262 Standard (ECMAScript) (раздел 15.10.2.6):

[...] Производственный Assertion::\b оценивает, возвращая внутреннее закрытие AssertionTester, которое принимает состояние аргумент x и выполняет следующее:

  • Пусть e будет x endIndex.
  • Вызовите IsWordChar (e-1) и пусть a будет логическим результатом.
  • Вызов IsWordChar (e) и пусть b - логический результат.
  • Если a истинно, а b - false, верните true.
  • Если a является false и b истинно, верните true.
  • Возвращает false. [..]

Абстрактная операция IsWordChar принимает целочисленный параметр e и выполняет следующее:

  • Если e == -1 или e == InputLength, верните false.
  • Пусть c - символ Input [e].
  • Если c является одним из шестидесяти трех символов ниже, верните true. АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ 0 1 2 3 4 5 6 7 8 9 _
  • Возвращает false

Это просто показывает, что \b использует Алгоритм "isWordChar" , чтобы проверить, действительно ли то, что вы пытаетесь сопоставить, - это слово. В определении "isWordChar" вы можете увидеть точное определение того, какие символы вернут true для "isWordChar" .

В моем мнении это не имеет абсолютно никакого отношения к используемому набору символов. Здесь нет ни ASCII, ни UNICODE. Это всего лишь 63 символа.