2013-03-20 10 views
5

Potrzebuję pasujących liter Unicode, podobnie jak PCRE \p{L}.Dopasowywanie liter Unicode z RegExp

Teraz, ponieważ klasa RegExp Dart'a jest oparta na ECMAScript, nie ma ona koncepcji \p{L}, niestety.

Rozważam możliwość zbudowania dużej klasy znaków pasującej do wszystkich liter Unicode, ale nie jestem pewien, od czego zacząć.

Tak, chcę, aby dopasować litery jak:

foobar 
מכון ראות 

Ale symbol R nie powinna być dopasowana:

BlackBerry® 

nie powinna również znaki sterujące ASCII lub znaki interpunkcyjne, etc Zasadniczo co jeden literę w każdym języku obsługiwanym przez Unicode, niezależnie od tego, czy jest to å, ä, φ, czy ת, powinny pasować, jeśli są rzeczywistymi literami.

Odpowiedz

2

Wygląda na to, że będziesz musiał powtórzyć ciągi w łańcuchu, a następnie sprawdzić wartość całkowitą względem tabeli zakresów Unicode.

Golang ma kod do generowania tych tabel bezpośrednio z unicode source. Zobacz maketables.go oraz niektóre inne pliki w pakiecie unicode golang.

Albo weźmy opcję leniwy i zgłosić błąd Dart, i czekać na zespół Dart do jej wdrożenia;)

2

Nie sądzę, że pełne informacje na temat klasyfikacji znaków Unicode jak liter lub niebędących literami jest w dowolnym miejscu w bibliotekach Dart. Możesz być w stanie stworzyć coś, co będzie działało głównie przy użyciu rzeczy z biblioteki Intl, szczególnie Bidi. Myślę, że na przykład,

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

może wykonać wiarygodną pracę. Przynajmniej wydaje się, że ma wiele zakresów dla ważnych znaków. Można też utworzyć własny RegExp na podstawie informacji w _LTR_CHARS i _RTL_CHARS. Wyraźnie mówi, że nie jest on w 100% dokładny, ale dobry w większości praktycznych celów.

2

Nie ma jeszcze wsparcia w Dart lub JS.

Biblioteka XSgexp JS obsługuje generowanie dość dużych wyrażeń regularnych klasy postaci, aby obsługiwać coś takiego. Możesz wygenerować wyrażenie regularne, wydrukować je i wyciąć i wkleić do swojej aplikacji.