Risposte:
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);
Quanto segue può essere usato per giuntare textall'interno di un'altra stringa a piacere index, con un removeCountparametro opzionale .
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('');quello di dare agli OP "Voglio una mela", invece di "Voglio una mela".
var output = a.substring(0, position) + b + a.substring(position);
Modifica: sostituito .substrcon .substringperché .substrora è una funzione legacy (per https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr )
String.prototype.substrè deprecato ora. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
substring in questo caso è una sostituzione diretta per la obsoleta substr, quindi la risposta diventa: var output = a.substring(0, position) + b + a.substring(position);.
.substring
È possibile aggiungere questa funzione alla classe di stringa
String.prototype.insert_at=function(index, string)
{
return this.substr(0, index) + string + this.substr(index);
}
in modo che tu possa usarlo su qualsiasi oggetto stringa:
var my_string = "abcd";
my_string.insertAt(1, "XX");
L'uso dei letterali di stringa ES6 sarebbe molto più breve:
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'
Forse è ancora meglio se determini la posizione usando indexOf () in questo modo:
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";
}
quindi chiama la funzione in questo modo:
insertString("I want apple", "an ", "apple");
Si noti che ho inserito uno spazio dopo "an" nella chiamata di funzione, piuttosto che nell'istruzione return.
La libreria Underscore.String ha una funzione che inserisce
insert (stringa, indice, sottostringa) => stringa
così
insert("Hello ", 6, "world");
// => "Hello world"
provare
a.slice(0,position) + b + a.slice(position)
o soluzione regexp
"I want apple".replace(/^(.{6})/,"$1 an")
var array = a.split(' ');
array.splice(position, 0, b);
var output = array.join(' ');
Questo sarebbe più lento, ma si occuperà dell'aggiunta di spazio prima e dopo un Inoltre, dovrai cambiare il valore della posizione (a 2, ora è più intuitivo)
Soluzione rapida! Se non vuoi aggiungere manualmente uno spazio, puoi farlo:
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);
(modifica: vedo che in realtà si trova una risposta sopra, scusa!)
Se è disponibile il lookbehind di ES2018 , un'altra soluzione regexp, che la utilizza per "sostituire" in una posizione di larghezza zero dopo l'ennesimo carattere (simile a quella di @Kamil Kiełczewski, ma senza memorizzare i caratteri iniziali in un gruppo di acquisizione):
"I want apple".replace(/(?<=^.{6})/, " an")
Beh, solo un piccolo cambiamento perche 'le soluzioni della soluzione sopra riportate
"Voglio una mela"
invece di
"Voglio una mela"
Per ottenere l'output come
"Voglio una mela"
usa il seguente codice modificato
var output = a.substr(0, position) + " " + b + a.substr(position);