2016-08-24 3 views
0

Ich habe ein ganz einfaches Problem mit Teilstring/Teilstr/Slice. Mein Code ist sehr kompliziert, deshalb werde ich ihn hier nicht veröffentlichen, aber hier ist die vereinfachte Version des Problems:Javascript ersetzen Teilstring funktioniert nicht gut, wenn die Zeichenfolge wiederholt

Zum Beispiel, wie TextString (5, 10) zu "Something" ändern?

text = "HelloHello"; 

wenn ich versuche,

text = text.replace(text.substring(5,10), "Something"); 

das Ergebnis wird "SomethingHello", weil text.substring (0, 5) war auch "Hallo", aber ich möchte bekommen "HelloSomething"

Es funktioniert auch nicht mit slice() und substr(), können Sie mir eine Lösung zeigen?

+0

Was ist los mit 'text = textstring (0,5) +" Etwas ";'? – nnnnnn

+0

nun, mein Code ist kompliziert, aber die eigentliche Frage ist: Wie ersetzt man die Zeichenfolge zwischen den Zeichen text [a] und text [b], wenn die Zeichenfolge bereits im Text vorlag? – aikich

+0

Meinst du, dass du * all * des Textes zwischen zwei Indexwerten durch irgendeinen anderen Text ersetzen willst, oder wenn du innerhalb der durch zwei Indexwerte spezifizierten Teilzeichenfolge suchen willst und nur innerhalb dieser Teilzeichenfolge eine Ersetzung vornehmen willst? Ich kann mir zwei Möglichkeiten vorstellen, wo es egal ist, ob der Suchstring außerhalb des angegebenen Bereichs erscheint. – nnnnnn

Antwort

1

Basierend auf den Kommentaren habe ich die Funktion replacePartOfText() geschrieben.

Diese Funktion den gesamten Text zu Wort zwischen dem Index zwei ersetzen (Start, Ende)

text = "HelloHello" 
 

 
function replacePartOfText(text, start, end, word) { 
 
    result = text.substring(0, start) + word + text.substring(end, text.length) 
 

 
    return result 
 
} 
 

 
text = replacePartOfText(text, 5, 10, "Something") 
 

 
console.log(text) // "HelloSomething"

+0

Das wird 'HelloSomething' nicht geben. Es wird alle Vorkommen ersetzen. –

+0

Die Wahrheit ist, dass ich auf die Zahlen die Zeichenfolge basierend ersetzen möchten 5 und 10 Zum Beispiel, wie würden Sie die 4. Hallo hier ersetzen: hellohello Hallo Hallo Hallo – aikich

+0

@ArunGhosh - es ist sicherlich gewonnen‘ t Ersetzen Sie alle Vorkommen.Eine Regex-Ersetzung ersetzt nur alle Vorkommen, wenn Sie das globale Flag angeben, aber in jedem Fall stimmt diese bestimmte Regex nur mit diesem Wort überein, wenn es am Ende der Zeichenfolge erscheint, also ... – nnnnnn

0
var text = "HelloHelloMahamadali.It is working now."; 
var textbefore = text.substring(0,5); 
var textafter = text.substring(5,text.length); 
var texttoreplace = "Hello"; 
text = textbefore + textafter.replace(texttoreplace, "Something"); 
alert(text); 

Bitte über eine Logik verwenden, ich hoffe, das wird Ihnen helfen . Vielen Dank. Zögern Sie nicht zu kommentieren.

+0

Vielen Dank :) – aikich

+0

Können Sie bitte diese Antwort als positiv bewerten, wenn es für Sie arbeitete bitte. – Mahamadali

+0

Ich habe nicht genug Reputation, so dass mein upvote nicht zählt:/Ich bin ein neuer Benutzer hier – aikich

0

Zum einen, um es zu arbeiten:

dieses Bedürfnis zu befriedigen:

"wie die Zeichenfolge zwischen dem Zeichen Text zu ersetzen [a] und Text [b]"

function replaceStringPortion(text, start, end, replacement, trim) { 
    text = !!trim ? text.trim() : text; 
    var fragments = [ 
    text.substr(0, start), 
    text.substr(start, end - start + 1), 
    text.substr(end + 1, text.length) 
    ]; 
    fragments[1] = replacement; 
    return fragments.join(''); 
} 

Aber die Notwendigkeit, die Sie beschrieben zu erfüllen (der Abschnitt nach den Text zwischen a und 01 zu ersetzen,):

function replaceAfterStringPortion(text, start, end, replacement, trim) { 
    text = !!trim ? text.trim() : text; 
    var fragments = [ 
    text.substr(0, start), 
    text.substr(start, end - start + 1), 
    text.substr(end + 1, text.length) 
    ]; 
    fragments[2] = replacement; 
    return fragments.join(''); 
} 

Zweitens .substr() und .replace() funktionierte gut.Hier ist der Grund:

Wenn Sie Nest Ihren Ausdruck Befehl kann es klar zu sagen:

text = text.replace(
    text.substring(5,10), // Returns "Hello" 
    "Something" 
); 

Also wirklich, was Sie tun, in dieser Reihenfolge:

  1. text.substring(5,10) die "Hello"
  2. zurück
  3. text.replace("Hello", "Something");, die, wie erwartet, "SomethingHello"
zurückgeben

Dies wird erwartet, da .replace() das erste Vorkommen der Zeichenfolge oder Muster ersetzt Sie passieren:

str.replace(regexp|substr, newSubStr|function)

...

substr (Muster)

Ein String, soll durch newSubStr ersetzt werden. Es wird als eine Verbatim-Zeichenfolge behandelt und wird nicht als regulärer Ausdruck interpretiert. Nur das erste Vorkommen wird ersetzt.

+0

Danke für die ausführliche Erklärung! :) – aikich

+0

Hinzugefügt 'trimmen' Option für Leerzeichen Füllung – Martin

1

Warum nicht splice verwenden, anstatt all diese gewundenen Lösungen?

var chars = "HelloHelloHello Hello HelloHello".split(""); 
 

 
chars.splice(16, 5, "Something"); 
 

 
alert(chars.join(""));

Klare Funktionalität, Lesbarkeit und Wartbarkeit wird immer gewinnen, und das ist nur etwa so offensichtlich, wie Sie bekommen können.

+0

Diese Methode funktioniert auch für mich. Danke :) – aikich

+0

das ist ok, aber was ist, wenn ich diese Funktionalität nicht nur für 'chars' wiederverwenden muss? Ich denke Funktion ist eine allgemeinere Lösung. – semanser

+0

Ja, die Funktionen sind ein zentraler Bestandteil von JavaScript. Sie heißen 'split',' splice' und 'join'. – rockerest

Verwandte Themen