web-dev-qa-db-fra.com

Insérer une chaîne à la position x d'une autre chaîne

J'ai 2 vars et dois insérer b dans un à cette position. Le résultat que je recherche est "Je veux une pomme". Comment puis-je faire cela avec jquery ou javascript?

var a = "I want Apple";
var b = " an";
var position = 6;
184
sami

var a = "I want Apple";
var b = "an";
var position = 6;
var output = [a.slice(0, position), b, a.slice(position)].join('');
console.log(output);

306
jAndy
var output = a.substr(0, position) + b + a.substr(position);
201
nickf

Vous pouvez ajouter cette fonction à la classe string 

String.prototype.insertAt=function(index, string) { 
  return this.substr(0, index) + string + this.substr(index);
}

afin que vous puissiez l'utiliser sur n'importe quel objet string:

var myString = "abcd";
myString.insertAt(1, "XX");
28
jasin_89

Peut-être que c'est encore mieux si vous déterminez position using indexOf () comme ceci:

function insertString(a, b, at)
{
    var position = a.indexOf(at); 

    if (position !== -1)
    {
        return a.substr(0, position) + b + a.substr(position);    
    }  

    return "substring not found";
}

puis appelez la fonction comme ceci:

insertString("I want Apple", "an ", "Apple");

Notez que je mets un espace après le "un" dans l'appel de fonction, plutôt que dans l'instruction return.

8
paulo62

La bibliothèque Underscore.String a une fonction qui fait Insert

insert (chaîne, index, sous-chaîne) => chaîne

ainsi

insert("Hello ", 6, "world");
// => "Hello world"
3
svarog
var array = a.split(' '); 
array.splice(position, 0, b);
var output = array.join(' ');

Ce serait plus lent, mais prendrait en compte l'ajout d'espace avant et après le De plus, vous devrez changer la valeur de position (2, c'est plus intuitif maintenant)

1
Ravindra Sane

L'utilisation de les littéraux de chaîne ES6 , serait beaucoup plus courte:

const instertAt = (str, sub, pos) => `${str.slice(0, pos)}${sub}${str.slice(pos)}`;
    
console.log(instertAt('I want Apple', ' an', 6)) // logs 'I want an Apple'

1
Stefan J

essayer

a.slice(0,position) + b + a.slice(position)

var a = "I want Apple";
var b = " an";
var position = 6;

var r= a.slice(0,position) + b + a.slice(position);

console.log(r);

ou solution regexp

"I want Apple".replace(/^(.{6})/,"$1 an")

var a = "I want Apple";
var b = " an";
var position = 6;

var r= a.replace(new RegExp(`^(.{${position}})`),"$1"+b);

console.log(r);
console.log("I want Apple".replace(/^(.{6})/,"$1 an"));

0
Kamil Kiełczewski

Solution rapide! Si vous ne voulez pas ajouter manuellement un espace, vous pouvez faire ceci:

var a = "I want Apple";
var b = "an";
var position = 6;
var output = [a.slice(0, position + 1), b, a.slice(position)].join('');
console.log(output);

(edit: je vois que c'est effectivement répondu ci-dessus, désolé!)

0
K. Yu

Eh bien, juste un petit changement, car les résultats de la solution ci-dessus 

"Je veux une pomme"

au lieu de 

"Je veux une pomme"

Pour obtenir la sortie en tant que 

"Je veux une pomme"

utiliser le code modifié suivant 

var output = a.substr(0, position) + " " + b + a.substr(position);
0
Clyde Lobo