Réponses:
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);
Ce qui suit peut être utilisé pour épisser textau sein d'une autre chaîne à une valeur souhaitée index, avec un removeCountparamètre facultatif .
if (String.prototype.splice === undefined) {
/**
* Splices text within a string.
* @param {int} offset The position to insert the text at (before)
* @param {string} text The text to insert
* @param {int} [removeCount=0] An optional number of characters to overwrite
* @returns {string} A modified string containing the spliced text.
*/
String.prototype.splice = function(offset, text, removeCount=0) {
let calculatedOffset = offset < 0 ? this.length + offset : offset;
return this.substring(0, calculatedOffset) +
text + this.substring(calculatedOffset + removeCount);
};
}
let originalText = "I want apple";
// Positive offset
console.log(originalText.splice(6, " an"));
// Negative index
console.log(originalText.splice(-5, "an "));
// Chaining
console.log(originalText.splice(6, " an").splice(2, "need", 4).splice(0, "You", 1));
.as-console-wrapper { top: 0; max-height: 100% !important; }
var output = [a.slice(0, position + 1), b, a.slice(position)].join('');de donner aux PO "Je veux une pomme", au lieu de "Je veux une pomme".
var output = a.substring(0, position) + b + a.substring(position);
Modifier: remplacé .substrpar .substringcar .substrest désormais une fonction héritée (par https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr )
String.prototype.substrest obsolète maintenant. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
.substring
Vous pouvez ajouter cette fonction à la classe de chaîne
String.prototype.insert_at=function(index, string)
{
return this.substr(0, index) + string + this.substr(index);
}
afin que vous puissiez l'utiliser sur n'importe quel objet chaîne:
var my_string = "abcd";
my_string.insertAt(1, "XX");
L' utilisation de littéraux de chaîne ES6 serait beaucoup plus courte:
const insertAt = (str, sub, pos) => `${str.slice(0, pos)}${sub}${str.slice(pos)}`;
console.log(insertAt('I want apple', ' an', 6)) // logs 'I want an apple'
Peut-être que c'est encore mieux si vous déterminez la position en utilisant 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 j'ai mis un espace après le "an" dans l'appel de fonction, plutôt que dans l'instruction return.
La bibliothèque Underscore.String possède une fonction qui n'insère
insert (chaîne, index, sous-chaîne) => chaîne
ainsi
insert("Hello ", 6, "world");
// => "Hello world"
essayer
a.slice(0,position) + b + a.slice(position)
ou solution regexp
"I want apple".replace(/^(.{6})/,"$1 an")
var array = a.split(' ');
array.splice(position, 0, b);
var output = array.join(' ');
Ce serait plus lent, mais vous vous occuperez de l'ajout d'espace avant et après un. Aussi, vous devrez changer la valeur de la position (à 2, c'est plus intuitif maintenant)
Solution rapide! Si vous ne souhaitez pas ajouter manuellement un espace, vous pouvez le faire:
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);
(modifier: je vois que cela est en fait répondu ci-dessus, désolé!)
Si le lookbehind d'ES2018 est disponible , une autre solution d'expression régulière, qui l'utilise pour "remplacer" à une position de largeur nulle après le Nème caractère (similaire à celle de @Kamil Kiełczewski, mais sans stocker les caractères initiaux dans un groupe de capture):
"I want apple".replace(/(?<=^.{6})/, " an")
Eh bien juste un petit changement car les sorties de 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"
utilisez le code modifié suivant
var output = a.substr(0, position) + " " + b + a.substr(position);