2016-12-19 5 views
0

Ich habe einige Eingabe auf einer Webseite, die ich wieder anzeigen und an anderer Stelle einreichen. Das aktuelle Problem ist, dass ich alle einzigen Backslashes verdoppeln möchte, die zwischen Nicht-Backslash-Zeichen eingefügt sind, bevor Sie die Eingabe an anderer Stelle einreichen.Escape einzelnen Backslash zwischen nur Backslash-Zeichen

Test Zeichenfolge "domain\name\\nonSingle\\\WontBe\\\\Returned", ich möchte nur den ersten einzelnen Backslash, zwischen Domain und Name.

sollte diese Saite nichts bekommt "\\get\\\nothing\\\\"

Meine aktuellen Muster, dass ich am nächsten mit bekommen kann, ist [\w][\\](?!\\) jedoch dies die "\n" aus dem ersten Test-String erhalten wird ich aufgelistet haben. Ich würde gerne Lookbehind für die Regex verwenden, aber Javascript hat nicht so etwas für die Version, die ich benutze. Hier ist die Seite, die ich habe meine regexs testet auf http://www.regexpal.com/

Derzeit bin ich uneffizient diese regex [\w][\\](?!\\), um alle einzelnen Schrägstriche vor ihnen zwischen nicht-umgekehrten Schrägstrich Zeichen und das Zeichen eingeschlossen zu extrahieren (was ich nicht will) und dann ersetzen Sie es mit der gleichen Zeichenfolge und einem Backslash am Ende davon.

Zum Beispiel gegeben domain\name\\bl\\\ah mein aktueller Regex [\w][\\]\(?!\\) wird "n\" zurückgeben. Dies führt dazu, dass mein Code einige zusätzliche Verarbeitungen durchführen muss, anstatt nur replace zu verwenden.

Ich interessiere mich nicht für jeden doppelten, dreifachen oder vierfachen Backslashes, sie können in Ruhe gelassen werden.

+0

Was soll die Regex-Operation für 'Domäne \ Name \ vorhergehendeBackslashesUnwanted' zurückgeben? Dies ist für mich unklar – KevBot

+0

Test Zeichenfolge "Domäne \ Name \\ vorherigeBackslashesUnwanted", ich möchte nur die einzige \ zwischen Domäne und Name erhalten. Der gewünschte Regex sollte nichts zurückgeben, wenn die Testzeichenfolge \\\\ get \\\\ nichts angegeben wird. Die nächste Regex, die ich habe, ist [\ w] [\\\] (?! \\\) (Ich habe Probleme mit der Flucht, aber es sollte nur zwei Backslashes in der mittleren eckigen Klammer und den runden Klammern geben) gibt das erste Zeichen vor einem einzelnen umgekehrten Schrägstrich zurück. regexpal.com – user1821961

+0

Was willst du mit dem Spiel machen? Ersetzen Sie es durch etwas anderes? Teilen Sie die Zeichenfolge? Oder markieren Sie es für den Benutzer? –

Antwort

0

Die einfachste Methode zum Übereinstimmen von Escapes besteht darin, alle maskierten Zeichen zu finden.

\\(.) 

Und dann im Ersatz, entscheiden, was damit zu tun, basierend auf was erfasst wurde.

var s = "domain\\name\\\\backslashesInDoubleBackslashesWontBeReturned"; 
 
console.log('input:', s); 
 

 
var r = s.replace(/\\(.)/g, function (match, capture1) { 
 
    return capture1 === '\\' ? match : '$' + capture1; 
 
}); 
 
console.log('result:', r);

Die nächstgelegene Sie tatsächlich passend zu den unescaped Schrägstriche erhalten können, ist

((?:^|[^\\])(?:\\\\)*)\\(?!\\) 

Es wird eine ungerade Anzahl von Schrägstriche entsprechen, und erfassen alle, aber die letzte in capture Gruppe 1

var re = /((?:^|[^\\])(?:\\\\)*)\\(?!\\)/g; 
 
var s = "domain\\name\\\\escapedBackslashes\\\\\\test"; 
 

 
var parts = s.split(re); 
 
console.dir(parts); 
 

 
var cleaned = []; 
 
for (var i = 1; i < parts.length; i += 2) 
 
{ 
 
    cleaned.push(parts[i-1] + parts[i]); 
 
} 
 
cleaned.push(parts[parts.length - 1]); 
 
console.dir(cleaned);

Die Elemente mit gerader Nummerierung (gezählt von Null) haben keinen übereinstimmenden Text. Die ungeradzahligen Elemente werden der erfasste Text sein.

Jeder erfasste Text sollte als Teil des vorhergehenden Textes betrachtet werden.

+0

Ich entschuldige mich für die Unklarheit, ich habe die Beispiel-Test-Strings in meiner Frage aktualisiert. Meine aktuelle Lösung löst bei dreifachen Backslashes nicht aus. Ich muss keine ungerade Anzahl aufeinanderfolgender Backslashes> 1 verarbeiten. Ich möchte nur eine Regex-Triggerung auf einen einzelnen Backslash, der von Nicht-Backslash-Zeichen umgeben ist. Ich kann weniger Matches verarbeiten, indem ich meine aktuelle Regex verwende. – user1821961

Verwandte Themen