2013-03-20 9 views
5

Ich bin auf der Suche nach passenden Unicode-Buchstaben, ähnlich wie PCRE \p{L}.Passende Unicode-Buchstaben mit RegExp

Nun, da Dart RegExp Klasse auf ECMAScript basiert, hat es leider nicht das Konzept \p{L}.

Ich bin dabei, vielleicht eine große Zeichenklasse zu konstruieren, die allen Unicode-Buchstaben entspricht, aber ich bin mir nicht sicher, wo ich anfangen soll.

Also, ich möchte Buchstaben wie zum Spiel:

foobar 
מכון ראות 

Aber das R Symbol angepasst werden sollte:

BlackBerry® 

sollte weder eine ASCII-Steuerzeichen oder Interpunktionszeichen, etc. Im Grunde jeder Buchstabe in jeder Sprache Unicode unterstützt, ob es å, ä, φ oder, ist, sollten sie übereinstimmen, wenn sie tatsächliche Buchstaben sind.

Antwort

2

Sieht so aus, als müssten Sie die Runen in der Zeichenfolge durchlaufen und dann den ganzzahligen Wert in einer Tabelle mit Unicode-Bereichen überprüfen.

Golang verfügt über einen Code, um diese Tabellen direkt aus der unicode source zu generieren. Siehe maketables.go und einige der anderen Dateien im Golang-Unicode-Paket.

Oder die faule Option nehmen, und ein Dart Bug-Datei, und warten Sie auf das Dart-Team, sie umzusetzen;)

2

Ich glaube nicht, dass alle Informationen über Klassifizierung von Unicode-Zeichen als Buchstaben oder Nicht-Buchstaben ist irgendwo in den Dart-Bibliotheken. Sie könnten vielleicht etwas zusammenfügen, das größtenteils mit den Dingen in der Intl-Bibliothek funktioniert, besonders mit Bidi. Ich denke, dass zum Beispiel

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

könnte eine plausible Arbeit tun. Zumindest scheint es dort eine Anzahl von Bereichen für gültige Zeichen zu geben. Oder Sie können Ihre eigene RegExp basierend auf den Informationen in _LTR_CHARS und _RTL_CHARS zusammenstellen. Es sagt ausdrücklich, es ist nicht 100% genau, aber gut für die meisten praktischen Zwecke.

2

Es gibt keine Unterstützung für diese noch in Dart oder JS.

Die Xregexp JS-Bibliothek unterstützt das Generieren von Regexps für große Zeichenklassen, um so etwas zu unterstützen. Sie können die Regexp generieren, sie ausdrucken und ausschneiden und in Ihre App einfügen.