如何在JavaScript中替换特定索引处的字符?

如何在JavaScript中替换特定索引处的字符?,javascript,string,replace,character-replacement,Javascript,String,Replace,Character Replacement,我有一个字符串,比如说helloworld,我需要替换索引3处的字符。如何通过指定索引替换字符 var str = "hello world"; 我需要像这样的东西 str.replaceAt(0,"h"); var x = "Hello world" x = x.substring(0, i) + 'h' + x.substring(i+1); 你不能。将位置和concat前后的字符放入新字符串: var s = "Hello world"; var index = 3; s = s.s

我有一个字符串,比如说
helloworld
,我需要替换索引3处的字符。如何通过指定索引替换字符

var str = "hello world";
我需要像这样的东西

str.replaceAt(0,"h");
var x = "Hello world"
x = x.substring(0, i) + 'h' + x.substring(i+1);

你不能。将位置和concat前后的字符放入新字符串:

var s = "Hello world";
var index = 3;
s = s.substring(0, index) + 'x' + s.substring(index + 1);

JavaScript中没有
replaceAt
函数。可以使用以下代码替换指定位置任何字符串中的任何字符:

函数rep(){
var str='Hello World';
str=setCharAt(str,4,'a');
警报(str);
}
函数setCharAt(str、index、chr){
如果(index>str.length-1)返回str;
返回str.substring(0,索引)+chr+str.substring(索引+1);
}

单击
在JavaScript中,字符串是不可变的,这意味着您最好使用更改的内容创建一个新字符串,并将变量指定给它

您需要自己定义
replaceAt()
函数:

String.prototype.replaceAt = function(index, replacement) {
    return this.substr(0, index) + replacement + this.substr(index + replacement.length);
}
然后像这样使用它:

var hello = "Hello World";
alert(hello.replaceAt(2, "!!")); // He!!o World

在Javascript中,字符串是不可变的,因此您必须执行以下操作

str.replaceAt(0,"h");
var x = "Hello world"
x = x.substring(0, i) + 'h' + x.substring(i+1);

要用“h”替换i处x中的字符,这里的方法很复杂。 我会这样做:

var myString = "this is my string";
myString = myString.replace(myString.charAt(number goes here), "insert replacement here");

这很简单。

使用向量通常对接触字符串最有效

我建议使用以下功能:

String.prototype.replaceAt=function(index, char) {
    var a = this.split("");
    a[index] = char;
    return a.join("");
}
运行以下代码段:

String.prototype.replaceAt=函数(索引,字符){
var a=本次拆分(“”);
a[索引]=字符;
返回a.join(“”);
}
var str=“你好世界”;
str=str.replaceAt(3,“#”);

文件编写(str)@CemKalyoncu:谢谢你的回答

我还稍微修改了它,使其更像Array.splice方法(并考虑了@Ates):


其工作原理类似于阵列。拼接

String.prototype.splice = function (i, j, str) {
    return this.substr(0, i) + str + this.substr(j, this.length);
};

这里有很多答案,所有答案都基于两种方法:

  • 方法1:使用两个子字符串拆分字符串,并在它们之间填充字符
  • 方法2:将字符串转换为字符数组,替换一个数组成员并将其联接
就我个人而言,我会在不同的情况下使用这两种方法。让我解释一下

@FabioPhms:您的方法是我最初使用的方法,我担心它对包含大量字符的字符串不好。然而,问题是有多少角色?我在10个“lorem ipsum”段落中测试了它,耗时几毫秒。然后,我在10倍大的绳子上测试了它——其实差别不大。嗯

@vsync,@corymahorter:你的评论是明确的;然而,再一次,什么是大字符串?我同意对于32…100kb的性能应该更好,并且应该使用子字符串变量来进行这个字符替换操作

但是,如果我必须更换好几个,会发生什么呢

我需要自己进行测试,以证明在这种情况下什么更快。假设我们有一个算法,可以处理由1000个字符组成的相对较短的字符串。我们预计该字符串中的每个字符平均将被替换约100次。所以,测试类似这样的东西的代码是:

var str = "... {A LARGE STRING HERE} ...";

for(var i=0; i<100000; i++)
{
  var n = '' + Math.floor(Math.random() * 10);
  var p = Math.floor(Math.random() * 1000);
  // replace character *n* on position *p*
}
var str=“…{此处有一个大字符串}…”;

对于(var i=0;i我做了一个函数,该函数执行与您要求的类似的操作,它检查字符串中的字符是否在不允许的字符数组中,如果是,则将其替换为“”

var validate=函数(值){

var notAllowed=[“;”,““,“>”,“我知道这是旧的,但解决方案不适用于负索引,所以我给它添加了一个补丁。希望它能帮助别人

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

}

可以扩展字符串类型以包括inset方法:

String.prototype.append=函数(索引,值){
返回this.slice(0,索引)+值+this.slice(索引);
};
var s=“新字符串”;

警报(s.append(4,“complete”);
如果要替换字符串中的字符,应创建可变字符串。这些基本上是字符数组。您可以创建工厂:

  function MutableString(str) {
    var result = str.split("");
    result.toString = function() {
      return this.join("");
    }
    return result;
  }
然后,您可以访问字符,当用作字符串时,整个数组将转换为字符串:

  var x = MutableString("Hello");
  x[0] = "B"; // yes, we can alter the character
  x.push("!"); // good performance: no new string is created
  var y = "Hi, "+x; // converted to string: "Hi, Bello!"

假设您要将
Kth
索引(基于0的索引)替换为
'Z'
。 您可以使用
Regex
来执行此操作

var re = var re = new RegExp("((.){" + K + "})((.){1})")
str.replace(re, "$1A$`");
函数dothis(){
var x=document.getElementById(“x”).value;
var index=document.getElementById(“index”).value;
var text=document.getElementById(“text”).value;
var length=document.getElementById(“length”).value;
var arr=x.split(“”);
阵列拼接(索引、长度、文本);
var result=arr.join(“”);
document.getElementById('output').innerHTML=result;
控制台日志(结果);
}
dothis();



使用String.replace替换为callback的一行程序(不支持表情符号):

解释:

//String.replace will call the callback on each pattern match
//in this case - each character
'dog'.replace(/./g, function (character, index) {
   if (index == 0) //we want to replace the first character
     return 'f'
   return character //leaving other characters the same
})
你可以试试

var strArr = str.split("");

strArr[0] = 'h';

str = strArr.join("");

如果您想在react/javascript中为单词或单个字符的索引设置样式,我提供了一个版本

replaceAt( yourArrayOfIndexes, yourString/orArrayOfStrings ) 
工作示例:

函数替换(索引数组,[…字符串]){
const replaceValue=i=>string[i]={string[i]};
forEach索引(replaceValue);
返回字符串;
}
这是另一种替代方法

function replaceAt(indexArray, [...string]) {
    const startTag = '<b>';
    const endTag = '</b>';
    const tagLetter = i => string.splice(i, 1, startTag + string[i] + endTag);
    indexArray.forEach(tagLetter);
    return string.join('');
}
函数替换(索引数组,[…字符串]){
常数startTag='';
const endTag='';
const tagLetter=i=>string.splice(i,1,startTag+string[i]+endTag);
forEach索引(标记字母);
返回字符串。join(“”);
}
还有一个

function replaceAt(indexArray, [...string]) {
    for (let i = 0; i < indexArray.length; i++) {
        string = Object.assign(string, {
          [indexArray[i]]: <b>{string[indexArray[i]]}</b>
        });
    }
    return string;
}
函数替换(索引数组,[…字符串]){
for(设i=0;i
您可以使用以下函数替换字符串特定位置的
字符
字符串
。要替换以下所有匹配情况,请使用函数

String.prototype.replaceMatch=
function replaceAt(indexArray, [...string]) {
    const replaceValue = i => string[i] = <b>{string[i]}</b>;
    indexArray.forEach(replaceValue);
    return string;
}
function replaceAt(indexArray, [...string]) {
    const startTag = '<b>';
    const endTag = '</b>';
    const tagLetter = i => string.splice(i, 1, startTag + string[i] + endTag);
    indexArray.forEach(tagLetter);
    return string.join('');
}
function replaceAt(indexArray, [...string]) {
    for (let i = 0; i < indexArray.length; i++) {
        string = Object.assign(string, {
          [indexArray[i]]: <b>{string[indexArray[i]]}</b>
        });
    }
    return string;
}
const str = 'Hello RegEx!';
const index = 11;
const replaceWith = 'p';

//'Hello RegEx!'.replace(/^(.{11})(.)/, `$1p`);
str.replace(new RegExp(`^(.{${ index }})(.)`), `$1${ replaceWith }`);

//< "Hello RegExp"