2013-03-20 2 views
5

Мне нужны соответствующие символы Юникода, аналогично PCRE's \p{L}.Соответствие букв Unicode с RegExp

Теперь, поскольку класс RegExp Дарта основан на ECMAScript, он, к сожалению, не имеет понятия \p{L}.

Я ищу, возможно, для создания большого символьного класса, который соответствует всем буквам Юникода, но я не уверен, с чего начать.

Итак, я хочу, чтобы соответствовать буквам как:

foobar 
מכון ראות 

Но символ R не должен быть согласован:

BlackBerry® 

Ни должны любые управляющие символы ASCII или знаки препинания и т.д. По сути, каждое письмо на каждом языке поддерживает Unicode, будь то å, ä, φ или ת, они должны совпадать, если они являются фактическими буквами.

ответ

2

Похоже, вам придется проходить через руны в строке, а затем проверить целочисленное значение на таблицу диапазонов юникода.

У Golang есть код для создания этих таблиц непосредственно из unicode source. См. maketables.go и некоторые другие файлы в пакете golang unicode.

Или ленивый вариант, и файл Dart ошибка, и ждать команды Dart для его осуществления;)

2

Я не думаю, что полная информация о классификации символов Unicode как письма или не-букв где-нибудь в библиотеках Дарта. Возможно, вам удастся собрать что-то вместе, которое будет работать в основном в библиотеке Intl, в частности Bidi. Я думаю, что, например,

isLetter (oneCharacterString) => Bidi.endsWithLtr (oneLetterString) || Bidi.endsWithRTL (oneLetterString);

может сделать правдоподобную работу. По крайней мере, по-видимому, у него есть ряд диапазонов для действительных символов. Или вы можете собрать свой собственный RegExp на основе информации в _LTR_CHARS и _RTL_CHARS. Он прямо говорит, что он не на 100% точным, но хорош для большинства практических целей.

2

В Дарте или JS нет поддержки для этого.

Библиотека Xregexp JS поддерживает создание довольно больших регулярных выражений класса символов для поддержки чего-то подобного. Вы можете создать регулярное выражение, распечатать его и вырезать и вставить в свое приложение.

Смежные вопросы