2012-11-29 6 views
15

Mögliche Duplizieren:
Javascript RegExp + Word boundaries + unicode charactersRegex Wortgrenze b hat Probleme mit Umlauten (Sonderzeichen in deutscher Sprache)

In ECMA Script regex (hier als Referenz getestet: http://regexpal.com/) bekomme ich Fehlalarme mit Wortgrenzen (unter Verwendung von \b) und Umlauten. Zum Beispiel

regex \bPflanzen\b

sollte nicht "Pflanzenöl" entsprechen, aber es tut. Wenn ich den ö zu einem oe ändere, funktioniert alles. Regex scheint Umlaute nicht als Teil von Wörtern zu betrachten, obwohl sie in vielen Sprachen sind.

Was ist die beste Problemumgehung?

+2

... und die beste Problemumgehung ist, XRegExp zu verwenden, wie [diese Antwort] (http://stackoverflow.com/a/10591266/20938) empfiehlt. –

Antwort

11

Regex-Engines haben unterschiedliche Ideen, wie die Stenogramm-Klassen funktionieren. \b ist eng an \w gebunden, was in fast allen Regex-Aufgaben nahezu nutzlos ist, aber leider für viele Fälle "gut genug" ist, um seinen Fortbestand zu rechtfertigen.

In diesem Fall JavaScript berücksichtigt nur ASCII [a-zA-Z0-9_] für \w und seit \b entspricht einer Position zwischen einem Charakter von \w und etwas, das nicht Sie das beobachtete Verhalten bekommen.

Die übliche Abhilfe ist Lookarounds statt \b zu verwenden:

(?<![a-zA-ZäöüßÄÖÜ])Pflanzen((?![a-zA-ZäöüßÄÖÜ])) 

jedoch auch JavaScript nicht unterstützt Lookbehind, also müssen wir etwas anderes tun:

(^|[^a-zA-ZäöüßÄÖÜ])Pflanzen(?![a-zA-ZäöüßÄÖÜ]) 

Welche passen würde entweder der Anfang der Zeichenfolge oder ein Zeichen, das nicht von dieser Klasse stammt. Auf jeden Fall ist es unordentlich. Es ist an der Zeit, dass JavaScript die richtige Regex-Unterstützung einschließlich Unicode und Lookaround erhält.

+0

Treten Sie der [ECMAScript-Gemeinschaft] (http://www.ecmascript.org/community.php) bei und sagen Sie mit, warum es in ECMAScript ed 6, Harmony, ES Next, was auch immer sein sollte. – RobG

+0

Ich denke, das "Warum" ist ziemlich offensichtlich, da immer größere Mengen von Software (die auch mit verschiedenen Sprachen umgehen muss) in JS geschrieben werden. Der Mangel an korrekter Unicode-Unterstützung ist heutzutage eine ernste und schreckliche Unterlassung einer Sprache oder ihrer Standardbibliothek. In jedem Fall bin ich kein Spezifikations- oder Standardautor. Ich habe nicht einmal einen Hinweis auf JavaScript; Ich wäre die falsche Person, an der ich beteiligt sein könnte. – Joey