2013-03-17 11 views
7

Ich versuche, reguläre Ausdrücke in JavaScript zu kommentieren.Regelmäßige Ausdrücke kommentieren

Es scheint, dass viele Ressourcen, wie man entfernen Kommentare von Code unter Verwendung von Regex, aber nicht wirklich, wie man Kommentar regulären Ausdrücken in JavaScript so sind sie leichter zu verstehen zu sein.

Jede Hilfe wird sehr geschätzt!

+0

Wenn Sie [etwas wie Perls/x' Modifizierer] (http://stackoverflow.com/q/632795/139010) suchen, gibt es in JavaScript keine solche Sache. –

+2

Interessante Frage. Ich habe meine Regex in Strings aufgeteilt und die Strings kommentiert, dann habe ich sie in die RegExp eingeordnet. Ich würde gerne von einem besseren Weg hören. –

Antwort

10

Leider hat JavaScript keinen ausführlichen Modus für reguläre Ausdrücke wie einige andere Sprachen. Sie können this interesting, though finden.

Anstelle von externen Bibliotheken, ist die beste Wahl nur eine normale Zeichenfolge zu verwenden, und dass Kommentar:

var r = new RegExp(
    '('  + //start capture 
    '[0-9]+' + // match digit 
    ')'  //end capture 
); 
r.test('9'); //true 
+0

Interessant, aber die offensichtliche Grenze ist, dass es Sie nicht erlaubt, Regex-Literale zu erstellen. –

+1

Was können Sie mit Regex-Literalen erhalten, die Sie nicht mit der Syntax "new RegExp()" erhalten? – plemarquand

+3

@plemarquand Flucht wird zum Schmerz. Wenn Sie eine Sprache in eine Zeichenfolge einbetten, müssen Sie auf die Sonderzeichen achten. Zum Beispiel wird '/ s \/\ d + /' zu 's \\/\\ d + ''. Aus diesem Grund müssen Sie beim dynamischen Erstellen vorsichtig sein. Im Grunde genommen sind die gleichen Probleme auf der Server-Seite mit der Sprache Suppe. – Zirak

1

Ich würde vorschlagen, dass Sie einen regulären Kommentar über die Zeile mit dem regulären Ausdruck setzen, um es zu erklären.

Sie werden viel mehr Freiheit haben.

+1

Wie würde ein regulärer Kommentar oberhalb der Zeile in diesem Fall helfen: '(?: [A-z0-9! # $% & '* +/=?^_' {|} ~ -] + (?: \ . [a-z0-9! # $% & '* +/=?^_ '{|} ~ -] +) * |" (?: [\ x01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x21 \ x23- \ x5b \ x5d- \ x7f] | \\ [\ x01- \ x09 \ x0b \ x0c \ x0e- \ x7f]) * ") @ (?: (?: [a-z0-9] (?: [a-z0-9 -] * [a-z0-9])?.) + [a-z0-9] (?: [a-z0-9 -] * [a-z0-9 ])? | \ [(? :(?: 25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) \.) {3} (?: 25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]? | [A-z0-9 -] * [a-z0-9]: (?: [\ x01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x21- \ x5a \ x53- \ x7f] | \\ [\ x01- \ x09 \ x0b \ x0c \ x0e- \ x7f]) +) \]) $ ' Dies ist der Regex für E-Mail –

+0

Sie haben oben einen Kommentar mit mehreren Zeilen eingefügt. Und Sie erklären es Stück für Stück (genauso wie Explosion Pillen schlägt, aber oben. Es ist viel bequemer, wenn Sie die Registrierung ändern müssen.). – Jean

+4

@BenjaminGruenbaum Sie wissen, [Ihre Regex für E-Mail ist wahrscheinlich fehlerhaft] (http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/), oder? –

3

In mehreren anderen Sprachen (insbesondere Perl), gibt x Flagge des Besonderes. Wenn diese Option aktiviert ist, ignoriert die Regexp alle Leerzeichen und Kommentare in ihnen. Leider unterstützt Javascript regexps nicht die x Flagge.

Aufgrund fehlender Syntax ist die Lesbarkeit nur durch Konvention möglich. Meines ist, einen Kommentar vor dem schwierigen regulären Ausdruck hinzuzufügen, der es enthält, als ob du das x-Flag gehabt hättest. Beispiel:

/* 
    \+?  #optional + sign 
    (\d*) #the integeric part 
    (  #begin decimal portion 
    \. 
    \d+ #decimal part 
) 
*/ 
var re = /\+?(\d*)(\.\d+)/; 

Für komplexere Beispiele, können Sie sehen, was ich mit der Technik here und here getan haben.

+1

+1 für '#lesen Sie oben, ich wiederhole diesen Mist nicht '(ja, jemand folgt Ihren Links). –