Відповіді:
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);
Нижче описані дані можуть бути використані для сплайсування textв інший рядок за потрібним параметром indexз необов'язковим removeCountпараметром.
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('');дати ОП «Я хочу яблуко», а не «Я хочу яблуко».
var output = a.substring(0, position) + b + a.substring(position);
Редагувати: замінено .substrна те, .substringщо .substrтепер є застарілою функцією (за https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr )
String.prototype.substrзараз застаріло. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
substring в цьому випадку є прямою заміною для застарілого substr, так що відповідь буде: var output = a.substring(0, position) + b + a.substring(position);.
.substring
Ви можете додати цю функцію до класу рядків
String.prototype.insert_at=function(index, string)
{
return this.substr(0, index) + string + this.substr(index);
}
щоб ви могли використовувати його на будь-якому рядковому об'єкті:
var my_string = "abcd";
my_string.insertAt(1, "XX");
Використання рядкових літералів ES6 було б набагато коротшим:
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'
Можливо, це ще краще, якщо визначити позицію, використовуючи indexOf (), як це:
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";
}
тоді викличте функцію так:
insertString("I want apple", "an ", "apple");
Зауважте, що я розміщую пробіл після "а" у виклику функції, а не в операторі return.
Бібліотека Underscore.String має функцію, яка виконує Insert
insert (рядок, індекс, підряд) => рядок
як так
insert("Hello ", 6, "world");
// => "Hello world"
спробуйте
a.slice(0,position) + b + a.slice(position)
або розчин повторного виведення
"I want apple".replace(/^(.{6})/,"$1 an")
var array = a.split(' ');
array.splice(position, 0, b);
var output = array.join(' ');
Це буде повільніше, але ви подбаєте про додавання простору до та після нього. Також вам доведеться змінити значення позиції (до 2, зараз це інтуїтивніше)
Швидке виправлення! Якщо ви не хочете вручну додати пробіл, можете зробити це:
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);
(ред.: я бачу, що на це насправді відповіли вище, вибачте!)
Якщо перегляд назад ES2018 є доступний , один більш регулярним виразом рішення, яке використовує його , щоб «замінити» на нульову ширину позиції після символу N - го ( по аналогії з @Kamil Kiełczewski, але без збереження вихідних символів в захопленні групи):
"I want apple".replace(/(?<=^.{6})/, " an")
Ну просто невелика зміна викликає вищезазначені результати
"Я хочу анапл"
замість
"Я хочу яблуко"
Щоб отримати вихід як
"Я хочу яблуко"
використовувати наступний модифікований код
var output = a.substr(0, position) + " " + b + a.substr(position);