2017-04-11 4 views
1

und halten es nach wie vor im Objektliteral:Wie kann ich diese Regex aufteilen, um lesbarer zu machen?

url:  /:\/{0,3}(www\.)?([0-9.\-A-Za-z]{1,253})([\x00-\x7F]{1,2000})$/, 

Zusätzlich wie kann ich es vereinfachen.

Es ist nur ein Chaos im aktuellen Zustand. Ich mache mir im Moment keine Sorgen um Genauigkeit.

Hier ist mein Versuch von Crockford Buch:

makeRegex: function() { 
    var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3}) 
        ([0-9.\-A-Za-z]+) 
        (?::(\d+)) 
        ?(?:\/([^?#]*)) 
        ?(?:\?([^#]*)) 
        ?(?:#(.*))?$/; 
}, 
+0

Sind die Erfassungsgruppen nützlich? Müssen Sie etwas erfassen? –

+0

Ich mache ... Ich brauche die Domain ... nur die Domain ... es ist gerade ein Durcheinander ... Ich sollte wahrscheinlich löschen und neu anfangen. –

+0

Welche Sprache verwenden Sie? Die meisten Sprachen haben kleine libs, um das richtig zu handhaben;) –

Antwort

0

Reguläre Ausdrücke sind notorisch nicht lesbar. Sie mögen keine zusätzlichen Leerzeichen und haben keine Kommentare. Ihre einzige mögliche Lösung besteht darin, eine Zeichenkette zu konstruieren und diese in einen regulären Ausdruck umzuwandeln.

Hier sind die Schritte, die ich ging RegExp Trog

Ziel Regular Expression

var regex=/:\/{0,3}(www\.)?([0-9.\-A-Za-z]{1,253})([\x00-\x7F]{1,2000})$/; 

Verwenden Sie den Ausdruck aus einem String zu erstellen.

var parse_url = RegExp(':/{0,3}(www\\.)?([0-9.\\-A-Za-z]{1,253})([\\x00-\\x7F]{1,2000})$'); 

Denken Sie daran:

  • die / Trennzeichen am Anfang und am Ende des Ausdrucks sind nicht da - sie wörtlichen
  • die \ Zeichen in der Zeichenfolge nur in einem RegEx sind verdoppelt , weil die Zeichenkette eine eigene Interpretation von ihnen hat

Brechen Sie die Zeichenfolge auf, indem Siehinzufügenals strategische Punkte:

var parse_url = RegExp(':/{0,3}(www\\.)?'+'([0-9.\\-A-Za-z]{1,253})'+'([\\x00-\\x7F]{1,2000})$'); 

var parse_url = RegExp(':/{0,3}(www\\.)?'+ 
    '([0-9.\\-A-Za-z]{1,253})'+ 
    '([\\x00-\\x7F]{1,2000})$'); 

Es ist keine sehr gute Lösung, aber das ist alles, was Sie mit einem regulären Ausdruck tun können.

Modernes JavaScript unterstützt mehrzeilige Zeichenfolgen in Form von Vorlagenliteralen, aber das wird hier wahrscheinlich nicht viel helfen.

0

Ich empfehle, einen regulären Ausdruck in Teile zu zerlegen und jedem Teil eine gut benannte Variable zuzuordnen, mit einem Kommentar, falls nötig. Ein Beispiel, das das Prinzip eher zu zeigen, gemeint ist, als richtig URLs zu validieren, da eine URL-Matching regex schwer zu schreiben (https://mathiasbynens.be/demo/url-regex):

var protocol = '(?:https?|ftp)'; // Protocol can be "http", "https" or "ftp" 
var domain = '([A-Za-z0-9\.]+)'; // Alphanumeric characters separated by periods 
var path = '(?:[A-Za-z0-9\.\/]+)'; // Alphanumeric characters, . or/
var regexp = Regexp(protocol + '://' + domain + '/' + path); 

Jetzt haben Sie den regulären Ausdruck in kleinere, gebrochen leichter verständlich Mini-Ausdrücke, und der Gesamtausdruck ist viel einfacher zu lesen.

Verwandte Themen