2016-09-06 1 views
1

In erklärt Werte können wir tun:Wie füge ich einen Kommentar in einen Regexp-Wert oder -Wert ein?

var x, // comment 
    y, // comment 
    z; // comment 

und das ist in Ordnung. Ich habe das ein bisschen länger regExp (Ich bin immer noch ich regExp Einführung), die ich nicht tun würde verwendet, die

var pattern = /^(1\s?)?(\(\d{3}\)|\d{3})[\s\-]?\d{3}[\-\s]?\d{4}$/; 

funktioniert, aber wenn ich versuche, es zu tun, wie ich auf meinem Variablen Erklärung Beispiel tue:

var pattern = /^(1\s?)? // optional 1 with space or nonspace; also optional 
       (\(\d{3}\)|\d{3}) // optional() bracket in 3 digits 
       [\s\-]? // optional space and dash 
       \d{3} // 3 digits 
       [\-\s]? 
       \d{4}$/; // 4 digits 

Der obige Code wird nicht funktionieren, aber ich möchte dies nur für meine Lernzwecke tun. Ist es möglich zu tun?

+1

Zerlegen Sie es in einem Blockkommentar über dem Muster, wenn Sie dieses Format wünschen. – Jecoms

+0

* "Ist es möglich zu tun?" * Nr. –

+0

Ich versuchte mit/* */immer noch nicht für mich arbeiten, können Sie bitte meinen Code verdrehen? am/^ (1 \ s?)?/* */ich bekomme eine Warnung vor unbegründeten Kommentaren, und unten bekomme ich unerwartete Warnungen mit meinem \ – learningjavascriptks

Antwort

0

Mit Regex-Literale Sie können nicht tun, was Sie wollen, was stoßen so etwas wie dieses, obwohl versuchen:

var pattern = /^(1\s?)?(\(\d{3}\)|\d{3})[\s\-]?\d{3}[\-\s]?\d{4}$/; 
/*   /^(1\s?)?      optional 1 with space or nonspace 
       (\(\d{3}\)|\d{3}) optional() bracket in 3 digits 
       [\s\-]?       optional space and dash 
       \d{3}       3 digits 
       [\-\s]? 
       \d{4}$/       4 digits 
*/ 

gerade den Abbau unter hinzufügen? Wirklich, es ist nicht üblich, Regexes so kommentiert zu sehen, ein anderer Programmierer wäre in der Lage, die Regex selbst zu analysieren, wenn sie es müssten.

Im Allgemeinen kommentieren warum Sie tun etwas, anstatt wie, ist besser zu üben, so einen Kommentar vielleicht für Beispiele hinzuzufügen, was es sollte und sollte nicht übereinstimmen würde besser sein.

1

Sie könnten versuchen, den regulären Ausdruck zu bauen, um ein Array von Strings verketten:

var pattern = new RegExp([ 
     "(\\(\d{3}\\)|\\d{3})", // optional() bracket in 3 digits 
     "[\\s\\-]?", // optional space and dash 
     "\\d{3}", // 3 digits 
     "[\\-\\s]?", 
     "\\d{4}$/" // 4 digits 
].join("")); 

Natürlich ist dies nicht sehr elegant ist, wie es all diese Schrägstriche zu entkommen erfordert.

bearbeiten: Actualy können Sie diese vermeiden Slash Geschäft Flucht durch eine Reihe von RegExp s anstelle von Strings zu schaffen und sie dann verketten:

var pattern = new RegExp([ 
      /^(1\s?)?/, // optional 1 with space or nonspace; also optional 
      /(\(\d{3}\)|\d{3})/, // optional() bracket in 3 digits 
      /[\s\-]?/, // optional space and dash 
      /\d{3}/, // 3 digits 
      /[\-\s]?/, 
      /\d{4}$/ // 4 digits 
].map(function(x) {return x.source}).join("")); 

Diese benötigen einen zusätzlichen Schritt mit map jedes RegExp zurück zu konvertieren zu einer Zeichenfolge.

Verwandte Themen