Respuestas:
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);
Lo siguiente se puede usar para empalmar textdentro de otra cadena a la deseada index, con un removeCountparámetro opcional .
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('');dar a los OP "Quiero una manzana", en lugar de "Quiero una manzana".
var output = a.substring(0, position) + b + a.substring(position);
Editar: reemplazado .substrpor .substringporque .substrahora es una función heredada (por https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr )
String.prototype.substrestá en desuso ahora. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
.substring
Puede agregar esta función a la clase de cadena
String.prototype.insert_at=function(index, string)
{
return this.substr(0, index) + string + this.substr(index);
}
para que pueda usarlo en cualquier objeto de cadena:
var my_string = "abcd";
my_string.insertAt(1, "XX");
Usar literales de cadena ES6 sería mucho más corto:
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'
Tal vez sea aún mejor si determina la posición usando indexOf () de esta manera:
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";
}
luego llame a la función de esta manera:
insertString("I want apple", "an ", "apple");
Tenga en cuenta que pongo un espacio después de "an" en la llamada a la función, en lugar de en la declaración de retorno.
La biblioteca Underscore.String tiene una función que hace Insertar
insert (cadena, índice, subcadena) => cadena
al igual que
insert("Hello ", 6, "world");
// => "Hello world"
tratar
a.slice(0,position) + b + a.slice(position)
o solución regexp
"I want apple".replace(/^(.{6})/,"$1 an")
var array = a.split(' ');
array.splice(position, 0, b);
var output = array.join(' ');
Esto sería más lento, pero se encargará de agregar espacio antes y después de la an. Además, tendrá que cambiar el valor de la posición (a 2, ahora es más intuitivo)
¡Arreglo rapido! Si no desea agregar un espacio manualmente, puede hacer esto:
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);
(Editar: veo que esto realmente se respondió anteriormente, ¡lo siento!)
Si el lookbehind de ES2018 está disponible , una solución regexp más, que lo utiliza para "reemplazar" en una posición de ancho cero después del enésimo carácter (similar a @Kamil Kiełczewski, pero sin almacenar los caracteres iniciales en un grupo de captura):
"I want apple".replace(/(?<=^.{6})/, " an")
Bueno, solo un pequeño cambio porque los resultados de la solución anterior
"Quiero una manzana"
en vez de
"Quiero una manzana"
Para obtener la salida como
"Quiero una manzana"
usa el siguiente código modificado
var output = a.substr(0, position) + " " + b + a.substr(position);