Warum passt \ w nur zu englischen Wörtern in Javascript regex?

8

Ich versuche, URLs in irgendeinem Text zu finden, indem ich JavaScript-Code verwende. Das Problem ist, dass der reguläre Ausdruck, den ich benutze, \ w benutzt, um Buchstaben und Ziffern innerhalb der URL zu finden, aber es stimmt nicht mit nicht-englischen Zeichen überein (in meinem Fall - hebräische Buchstaben).

Also, was kann ich anstelle von \ w verwenden, um alle Buchstaben in allen Sprachen zu finden?

    
Doron Yaacoby 29.12.2008, 14:17
quelle

10 Antworten

17

Weil \w nur mit den ASCII-Zeichen 48-57 ('0' - '9'), 67-90 ('A' - 'Z') und 97-122 ('a' - 'z') übereinstimmt. Hebräische Zeichen und andere spezielle Fremdsprachenzeichen (z. B. Umlaut-o oder Tilde-n) liegen außerhalb dieses Bereichs.

Anstatt Fremdsprachenzeichen zu finden (es gibt so viele davon in vielen verschiedenen ASCII-Bereichen), sollten Sie besser nach den Zeichen suchen, die Ihre Wörter abgrenzen - Leerzeichen, Anführungszeichen und andere Interpunktionszeichen.

    
David Koelle 29.12.2008, 14:22
quelle
6

Der ECMA 262 v3-Standard, der die allgemein als JavaScript bekannte Programmiersprache definiert, schreibt vor, dass \w äquivalent zu [a-zA-Z0-9_] sein sollte und dass \d äquivalent zu [0-9 sein sollte ]. \s hingegen entspricht dem Standard ASCII und Unicode.

JavaScript unterstützt die \p -Syntax für übereinstimmende Unicode-Objekte auch nicht, daher gibt es keine gute Möglichkeit, dies zu tun. Sie können alle hebräischen Zeichen mit:

abgleichen %Vor%

Dies entspricht einfach jedem Codepunkt im hebräischen Block.

Sie können jedes ASCII-Wortzeichen oder jedes beliebige hebräische Zeichen mit:

abgleichen %Vor%     
Jan Goyvaerts 30.12.2008 13:33
quelle
5

Ich glaube, Sie suchen nach dieser Regex:

%Vor%     
lani 16.09.2010 06:33
quelle
3

Ich habe gerade XRegExp gefunden, das noch nicht erwähnt wurde, und ich bin ziemlich beeindruckt davon. Es ist eine alternative Implementierung für reguläre Ausdrücke, verfügt über ein Unicode-Plug-in und ist unter der MIT-Lizenz lizenziert.

Laut der Website, um Unicode-Zeichen zu entsprechen, würden Sie solchen Code verwenden:

%Vor%     
Rbjz 16.09.2011 09:26
quelle
2

Versuche dies \ p {L} die Unicode Regex zu Buchstaben

    
Marcelo Rodovalho 26.04.2013 16:02
quelle
1

Schauen Sie sich Ссылка an.

Es sieht so aus, als gäbe es kein \ w-Äquivalent für Unicode, aber Sie können einzelne Unicode-Buchstaben zuordnen, so dass Sie sie erstellen können.

    
Toon Krijthe 29.12.2008 14:22
quelle
1

Überprüfen Sie diese Frage zu JavaScript und Unicode . Sieht aus wie Jan Goyvaerts Antwort dort gibt Hoffnung für dich.

Edit: Aber dann scheint es, dass alle Browser \ p ... sowieso nicht unterstützen. Diese Frage sollte nützliche Informationen enthalten.

    
PEZ 29.12.2008 14:22
quelle
1

Beachten Sie, dass URIs (als Obermenge von URLs) von W3C so angegeben werden, dass nur US-ASCII-Zeichen zulässig sind. Normalerweise sollten alle anderen Zeichen durch Prozent-Notation dargestellt werden:

  

In lokalen oder regionalen Zusammenhängen und mit   Verbesserung der Technologie, könnten Benutzer   profitieren von der Möglichkeit, ein breiteres zu verwenden   Zeichenbereich; solche Verwendung ist nicht   definiert durch diese Spezifikation.   Prozentcodierte Oktette (Abschnitt 2.1)   kann innerhalb eines URI zur Darstellung verwendet werden   Zeichen außerhalb des Bereichs der   US-ASCII-codierter Zeichensatz wenn dies der Fall ist   Vertretung ist erlaubt durch die   Schema oder durch das Protokollelement in   auf die der URI verweist. So ein   Definition sollte die angeben   Zeichencodierung, um diese zu kartieren   Zeichen zu Oktetts vor dem Sein   Prozent-codiert für den URI. // URI: Generische Syntax

Was normalerweise passiert, wenn Sie eine URL mit Nicht-ASCII-Zeichen im Browser öffnen, werden sie in% AB-Notation übersetzt, was wiederum ist US-ASCII.

Wenn es möglich ist, die Art und Weise, wie das Material erstellt wird, zu beeinflussen, wäre die beste Option, URLs während ihrer Erstellung der urlencode () -Funktion zuzuweisen.

    
Gnudiff 30.12.2008 14:50
quelle
0

Vielleicht \ S (Nicht-Leerzeichen).

    
chaos 29.12.2008 14:21
quelle
0

Wenn Sie URLs mit nicht-englischen Buchstaben generieren, sollten Sie dies noch einmal überdenken.

Wenn ich das W3C korrekt interpretiere, dürfen URLs nur Wortzeichen innerhalb des lateinischen Alphabets enthalten .

    
Triptych 29.12.2008 15:36
quelle

Tags und Links