Вставка строки в позицию x другой строки - PullRequest
199 голосов
/ 06 декабря 2010

У меня есть две переменные, и мне нужно вставить строку b в строку a в точке, представленной position.В результате я ищу "Я хочу яблоко".Как я могу сделать это с помощью JavaScript?

var a = 'I want apple';
var b = ' an';
var position = 6;

Ответы [ 10 ]

331 голосов
/ 06 декабря 2010

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);
224 голосов
/ 06 декабря 2010
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)

29 голосов
/ 11 июня 2013

Вы можете добавить эту функцию в строковый класс

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");
8 голосов
/ 31 июля 2015

Может быть, даже лучше, если вы определите положение , используя 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");

Обратите внимание, что я ставлю пробел после "an" в вызове функции, а не в операторе return.

5 голосов
/ 05 августа 2015

Библиотека Underscore.String имеет функцию, которая выполняет Вставка

вставка (строка, индекс, подстрока) => строка

вроде так

insert("Hello ", 6, "world");
// => "Hello world"
3 голосов
/ 30 октября 2018

Использование строковых литералов 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'
1 голос
/ 11 февраля 2019

попробуй

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);

или решение регулярного выражения

"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"));
1 голос
/ 06 декабря 2010
var array = a.split(' '); 
array.splice(position, 0, b);
var output = array.join(' ');

Это будет медленнее, но позаботится о добавлении пробела до и после Также вам придется изменить значение позиции (на 2, теперь оно более интуитивно понятно)

0 голосов
/ 02 августа 2018

Быстрое исправление!Если вы не хотите добавлять пробел вручную, вы можете сделать это:

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);

(редактировать: я вижу, что на самом деле ответили выше, извините!)

0 голосов
/ 06 декабря 2010

Ну, небольшое изменение, потому что вышеприведенное решение выводит

"Я хочу ананас"

вместо

"Я хочу яблоко"

Чтобы получить вывод как

«Я хочу яблоко»

используйте следующий модифицированный код

var output = a.substr(0, position) + " " + b + a.substr(position);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...