2016-06-27 10 views
0

So habe ich eine Regex-Lösung, die Inhalte findet ersetzt, es funktioniert, indem Sie den Anfang und das Ende zu finden, so dass diese zwei:Regex brechen, wenn Schrägstriche Begegnung

var start = "/* Start: User One */", end = "/* End: User One */"; 

Dann habe ich eine userCSS Variable und eine newContent, newContent ersetzt alles in userCSS. Es funktioniert völlig ohne jegliche Zitate, aber wenn ein Zitat in der Mischung ist, bricht es.

Ich fühle mich wie ich muss diese Schrägstriche entkommen, aber ich bin mir nicht ganz sicher, wie.

Hier sind zwei Beispiele, die sollte erklären, was mit ich bin zu kämpfen:

Arbeits Geige: https://jsfiddle.net/xxuqv30t/

Gebrochene Geige mit Zitaten (Einzel und Doppel): https://jsfiddle.net/samfahav/

Beispiel das Hinzufügen background: url('/bg.jpg'); bricht den Regex.

Was ich suche: Wie entkomme ich den Angeboten mit meiner aktuellen Regex-Lösung?

var quote = function(str) { 
     return str.replace(/([.?*+^$[\]/(){}|-])/g, "\\$1"); 
    }; 

var re = new RegExp(quote(start) + "[^/]+" + quote(end)); 
var newCss = userCSS.replace(re, newContent); 

ich die Regex denken sucht den Anfang und das Ende, und wenn es geht durch Trys und schlug ein Zitat es zurück fällt und schlägt fehl.

Bearbeiten: Es scheint, die Schrägstriche brechen es, nicht die Zitate/Klammern.

Antwort

0

Sie entkommen Ihrem Backslash in der Regex.

Sie haben derzeit ([.?*+^$[\]/(){}|-]) und es sollte ([.?*+^$[\]\/(){}|-]) sein.

Ohne diesen Backslash zu umgehen, die Regex mit durch und Fehler verursachen, es ist kein akzeptiertes Format.

+0

Ich habe das früher versucht, aber es scheint, dass es funktioniert, den umgekehrten Schrägstrich aus dem mittleren Teil der Regex zu entfernen, also habe ich den umgekehrten Schrägstrich in der Variable entfernt: var re = new RegExp (quote (Anfang) + "[^] +" + Zitat (Ende)); und es scheint zu funktionieren. Hoffentlich gibt es keine Auswirkungen auf die Sicherheit? @m_callens – DennisTurn

Verwandte Themen