2016-11-11 3 views
-1

ich all Vorkommen dieses Symbols (Single Anführungszeichen) mit \‘ (Ein Schrägstrich und ein Hochkomma) ersetzen versuchen einfügen will.
Ich möchte das erste und letzte Hochkomma ignorieren.
Script in eine Endlosschleife läuft, während ein Zeichen

Um es in einer anderen Art und Weise gesagt, ich versuche einfach einen Schrägstrich vor den einfügen ' Eingang

Probe: ‚welt hallo die‘
Erwartete Ausgabe: ‚Hallo \‘ s world \ 's'

Ich habe den folgenden Code geschrieben, aber es scheint in eine Endlosschleife laufen, wenn ich es ausführen.

Was mache ich falsch?

Und gibt es einen effizienteren Weg, um es zu erledigen?

text = "'hello's world's'";  
for(i=text.indexOf("'") ; i<text.lastIndexOf("'");i++) 
{ 
    if(text[i]=="'") 
    { 
    text=text.substr(0,i)+ "\\" + text.substr(i); 

    } 
} 
+0

können Sie vermeiden, indem Schleife und erreiche dein Ergebnis mit Regex. siehe http://stackoverflow.com/a/40550014/7063373 –

Antwort

1

Zwei Probleme ...

Zunächst beginnen Sie mit dem Index des ersten Zitats , von dem Sie behaupten, dass Sie es überspringen möchten. Anstatt also beginnend mit:

i=text.indexOf("'") 

Start mit:

i=text.indexOf("'") + 1 

Zweitens, und mehr auf den Punkt der Endlosschleife, jedes Mal wenn ein Charakter den letzten Index der letzten Kurssteigerungen hinzufügen, indem Sie 1. So fügen Sie dem ersten Zitat immer Schrägstriche hinzu und schieben das letzte Zitat weiter weg.

So nach der ersten Schleife ist es:

"'hello\'s world's'" 

dann:

"'hello\\'s world's'" 

dann:

"'hello\\\'s world's'" 

Und so weiter, unendlich.

dies zu beheben, erhöhen Sie einfach i jederzeit wieder treffen Sie auf ein Spiel:

text=text.substr(0,i)+ "\\" + text.substr(i); 
i++; 

Die Idee dabei ist, dass, weil Sie haben der String geändert, müssen Sie um Ihre Platzhalter ändern in der Zeichenfolge (i) zu kompensieren.

+0

Danke für die Antwort. Ich verstehe jetzt, wo ich falsch gelaufen bin. –

2

Normalerweise können Sie tun, mit replace() Funktion:

text.replace(/'/g,"\\'"); 

jedoch, da Sie das erste und das letzte Hochkomma, versuchen Sie den folgenden Code ignorieren wollen:

text = "'hello's world's'"; 
first = text.indexOf("'"); 
last = text.lastIndexOf("'"); 
for (i=0; i < text.length - 1; i++) 
{ 

    if (text[i] == "'" && i != first && i != last) 
    { 
     text = text.substr(0,i) + "\\" + text.substr(i); 
     i++; 
    } 
} 
+0

weil ich die erste und die letzte Anführungszeichen intakt halten muss –

+1

Ja, tut mir leid. Ich habe die Antwort bearbeitet. –

2

Hier versuche ich nach dem Zeichen zu suchen, wenn es "'" ist, dann füge einfach "\" davor hinzu. Ich habe ein neues Array für das Ergebnis genommen.

Jedes Mal, wenn ich das Array zunächst von 0 bis zum Index von '' 'zerlegen und "//" zu dieser geschnittenen Zeichenfolge hinzufügen würde, nimmt der nächste Slicing-Index vom vorherigen Index von "'" + 1 zum aktuellen Index von " ‚“, das so weitergeht, bis die Länge der Saite

var text = "'hello's world's'"; 
 
var delimeter = "\\"; 
 
var result = ""; 
 
var newindex = 0; 
 
for (var i = 0; i < text.length; i++) { 
 
    if (text[i] == "'") { 
 
    var str = text.slice(newindex, i); 
 
    result += "\\" + str; 
 
    newindex = i + 1; 
 
    } 
 
} 
 
console.log(result);

Hoffe, dass es

Verwandte Themen