459 Stimmen

Einfügen einer Zeichenkette an einem bestimmten Index

Wie kann ich eine Zeichenfolge an einem bestimmten Index einer anderen Zeichenfolge einfügen?

 var txt1 = "foo baz"

Angenommen, ich möchte "bar" nach "foo" einfügen, wie kann ich das erreichen?

Ich dachte an substring() aber es muss doch einen einfacheren und direkteren Weg geben.

19voto

VisioN Punkte 137670

UPDATE 2016: Hier ist eine weitere nur zum Spaß (aber seriöser!) Prototyp-Funktion auf der Grundlage eines Einzeilers RegExp Ansatz (mit Prepend-Unterstützung bei undefined oder negativ index ):

/**
 * Insert `what` to string at position `index`.
 */
String.prototype.insert = function(what, index) {
    return index > 0
        ? this.replace(new RegExp('.{' + index + '}'), '$&' + what)
        : what + this;
};

console.log( 'foo baz'.insert('bar ', 4) );  // "foo bar baz"
console.log( 'foo baz'.insert('bar ')    );  // "bar foo baz"

Vorherige (zurück bis 2012) nur so zum Spaß Lösung:

var index = 4,
    what  = 'bar ';

'foo baz'.replace(/./g, function(v, i) {
    return i === index - 1 ? v + what : v;
});  // "foo bar baz"

18voto

Jake Stoeffler Punkte 2592

Wenn jemand nach einer Möglichkeit sucht, Text an mehreren Indizes in eine Zeichenkette einzufügen, sollte er dies ausprobieren:

String.prototype.insertTextAtIndices = function(text) {
    return this.replace(/./g, function(character, index) {
        return text[index] ? text[index] + character : character;
    });
};

Damit können Sie zum Beispiel Folgendes einfügen <span> Tags an bestimmten Stellen in einer Zeichenkette:

var text = {
    6: "<span>",
    11: "</span>"
};

"Hello world!".insertTextAtIndices(text); // returns "Hello <span>world</span>!"

18voto

Ben Aston Punkte 48965
  1. Instanziieren eines Arrays aus der Zeichenkette
  2. Utilisez Array#Splice
  3. Stringify wieder mit Array#join

Die Vorteile dieses Ansatzes sind zweifach:

  1. Einfach
  2. Unicode-Codepunkt-konform

    const pair = Array.from('USDGBP') pair.splice(3, 0, '/') console.log(pair.join(''))

10voto

David Hedlund Punkte 125085

In Ihrem aktuellen Beispiel könnten Sie das Ergebnis erreichen, indem Sie entweder

var txt2 = txt1.split(' ').join(' bar ')

o

var txt2 = txt1.replace(' ', ' bar ');

aber da Sie solche Annahmen machen können, können Sie auch gleich zu Gullens Beispiel übergehen.

In einer Situation, in der Sie wirklich keine anderen Annahmen als Zeichenindex-basierte machen können, dann würde ich wirklich für eine Teilstring-Lösung gehen.

8voto

user40521 Punkte 1758
my_string          = "hello world";
my_insert          = " dear";
my_insert_location = 5;

my_string = my_string.split('');  
my_string.splice( my_insert_location , 0, my_insert );
my_string = my_string.join('');

https://jsfiddle.net/gaby_de_wilde/wz69nw9k/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X