Обобщая ответ Афанасия Куракина, имеем:
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
.