我就快拿到了,但就是不太对。 我想做的就是从字符串中删除字符r。 问题是,字符串中r的实例不止一个。 但是,它总是索引4的字符(因此是第5个字符)。

示例字符串:crt/r2002_2

我想要什么:crt/2002_2

这个替换函数去掉了r

mystring.replace(/r/g, '')

生产:ct / 2002 _2

我尝试了这个函数:

String.prototype.replaceAt = function (index, char) {
    return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '')

只有当我用另一个字符替换它时,它才会工作。它不会简单地移除它。

任何想法吗?


当前回答

一个简单的函数式javascript方法是

Mystring = Mystring .split('/r').join('/')

简单,快速,全局替换,不需要函数或原型

其他回答

var mystring = "crt/r2002_2";
mystring = mystring.replace('/r','/');

将/r替换为/使用String.prototype.replace

或者,您可以使用带有全局标志的regex(如Erik Reppen和Sagar Gala所建议的)来替换所有发生的事件

mystring = mystring.replace(/\/r/g, '/');

编辑: 既然大家都在这里玩得很开心,而且user1293504似乎不会很快回来回答澄清问题,这里有一个从字符串中删除第n个字符的方法:

String.prototype.removeCharAt = function (i) {
    var tmp = this.split(''); // convert to an array
    tmp.splice(i - 1 , 1); // remove 1 element from the array (adjusting for non-zero-indexed counts)
    return tmp.join(''); // reconstruct the string
}

console.log("crt/r2002_2".removeCharAt(4));

由于user1293504使用了正常的计数而不是零索引计数,我们必须从索引中删除1,如果您希望使用此方法来复制charAt的工作方式,请不要从第三行索引中减去1,而是使用tmp。改为拼接(i, 1)。

你可以这样使用:if (str[4] === 'r') str = str.slice(0,4) + str.slice(5)

解释:

If (str[4] === 'r') 检查第5个字符是否为“r” str.slice (0, 4) 对字符串进行切片,以获得'r'之前的所有内容 + str.slice (5) 添加字符串的其余部分。

缩小:s = s[4] = =‘r’吗? s.slice (0, 4) + s.slice (5): s[37个字节!] 演示:

function remove5thR (s) s = s[4] =‘r’? s。切片(0.4)+ s。切片(5):s; 控制台日志(s);//输出日志 的 移除5thr ('crt/r2002_2') // > 'crt/2002_2' remove5thR(“crt | r2002_2 ') // > ' crt | 2002_2” 删除5thr(“rrrrr”)// >“rrrr” 删除5thr(“RRRRR”)// >“RRRRR”(不改变)

只有当我用另一个字符替换它时,它才会工作。它不会简单地移除它。

这是因为当char等于""时,char。Length是0,所以子字符串组合成原始字符串。按照您的代码尝试,以下将工作:

String.prototype.replaceAt = function (index, char) {
    return this.substr(0, index) + char + this.substr(index + 1);
    //   this will 'replace' the character at index with char ^
}

演示

我不喜欢使用replace函数从字符串中删除字符。那样做是不合逻辑的。通常我用c# (Sharp)编程,每当我想从字符串中删除字符时,我使用string类的remove方法,但没有Replace方法,即使它存在,因为当我要删除时,我只删除,不替换。这是合乎逻辑的!

在Javascript中,字符串没有remove函数,但是有substr函数。可以使用substr函数一次或两次从字符串中删除字符。您可以使用下面的函数删除字符串末尾的起始索引处的字符,就像c#方法首先重载string一样。删除(int startIndex):

function Remove(str, startIndex) {
    return str.substr(0, startIndex);
}

和/或你也可以让下面的函数删除字符在开始索引和计数,就像c#方法第二次重载字符串。删除(int startIndex, int count):

function Remove(str, startIndex, count) {
    return str.substr(0, startIndex) + str.substr(startIndex + count);
}

然后您可以使用这两个函数或其中一个来满足您的需要!

例子:

alert(Remove("crt/r2002_2", 4, 1));

输出:crt / 2002 _2

如果您在大型项目中经常这样做,那么通过使用没有逻辑的技术来实现目标可能会导致对代码的理解混乱,并在未来出现错误!

在c# (Sharp)中,你可以创建一个空字符'\0'。 也许你可以这样做:

String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '\0')

在谷歌上搜索或在互联网上冲浪,检查javascript是否允许您制作空字符,就像c#一样。如果是,那么学习如何做到这一点,也许replacat函数最终会工作,并且您将实现您想要的!

最后,'r'字符将被删除!