Как заменить символ по определенному индексу в JavaScript? - PullRequest
465 голосов
/ 16 сентября 2009

У меня есть строка, скажем, Hello world, и мне нужно заменить символ в индексе 3. Как я могу заменить символ, указав индекс?

var str = "hello world";

Мне нужно что-то вроде

str.replaceAt(0,"h");

Ответы [ 22 ]

0 голосов
/ 27 июня 2019

Обобщая ответ Афанасия Куракина, имеем:

function replaceAt(str, index, ch) {
    return str.replace(/./g, (c, i) => i == index ? ch : c)
}

let str = 'Hello World'
str = replaceAt(str, 1, 'u')
console.log(str) // Hullo World

Давайте расширим и объясним как регулярное выражение, так и функцию заменителя:

function replaceAt(str, index, newChar) {
    function replacer(origChar, strIndex) {
        if (strIndex === index)
            return newChar
        else
            return origChar
    }
    return str.replace(/./g, replacer)
}

let str = 'Hello World'
str = replaceAt(str, 1, 'u')
console.log(str) // Hullo World

Регулярное выражение . соответствует ровно одному символу. g соответствует каждому символу в цикле for. Функция replacer вызывается с учетом как исходного символа, так и индекса, где этот символ находится в строке. Мы делаем простое заявление if, чтобы определить, собираемся ли мы вернуть origChar или newChar.

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

Я знаю, что это старый, но решение не работает для отрицательного индекса, поэтому я добавляю к нему патч. надеюсь, это кому-нибудь поможет

String.prototype.replaceAt=function(index, character) {
    if(index>-1) return this.substr(0, index) + character + this.substr(index+character.length);
    else return this.substr(0, this.length+index) + character + this.substr(index+character.length);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...