Javascript – 从string中删除字符

我很接近这个,但是这是不对的。 我想要做的就是从string中删除字符“r”。 问题是,string中有多个“r”的实例。 然而,它总是第四个字符。

示例string:“crt / r2002_2”我想要什么:“crt / 2002_2”

这个replace函数删除“r”

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

产生:“ct / 2002_2”

我试过这个function:

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

它只适用于我用另一个字符replace它。 它不会简单地删除它。

有什么想法吗?

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

会用/使用String.prototype.replacereplace/r

或者,你可以使用正则expression式(带有一个全局标志(如下面的Erik Reppen & Sagar Gala所build议的))来replace所有出现的

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

总是有string函数,如果你知道你总是要删除第四个字符:

 str.slice(0, 4) + str.slice(5, str.length)) 

一个简单的functionJavaScript的方式将是

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

简单,快速,全球取代,不需要function或原型

你的第一个function几乎是正确的。 只要删除代表“全球”(编辑)的“g”标志,并给它一些上下文来发现第二个“r”。

编辑:没有看到这是第二个“R”之前,所以添加了“/”。 使用regEx arg时,需要\ /来转义'/'。 感谢upvotes,但我错了,所以我会修复和添加更多的细节,有兴趣了解更好的regEx的基本知识的人,但这将工作:

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

现在过度的解释:

在阅读/书写regEx模式时,请考虑以下方面:(字符或字符集合,然后是“字符或字符集”,后跟<…

在regEx中,字符或字符集可以是一次一个:

 /each char in this pattern/ 

所以读为e,其次是a,其次是c,等等。

或者一个人物或一组人物可以是人物angular色所描述的人物:

 /[123!y]/ //any one of these /[^123!y]/ //anything but one of the chars following '^' (very useful/performance enhancing btw) 

或扩展到与一定数量的字符相匹配(但仍然最好按照顺序模式考虑为单个元素):

 /a{2}/ //precisely two 'a' chars - matches identically as /aa/ would /[aA]{1,3}/ //1-3 matches of 'a' or 'A' /[a-zA-Z]+/ //one or more matches of any letter in the alphabet upper and lower //'-' denotes a sequence in a character class /[0-9]*/ //0 to any number of matches of any decimal character (/\d*/ would also work) 

所以,一起聊聊:

  var rePattern = /[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/g var joesStr = 'aaaAAAaaEat at Joes123454321 or maybe aAaAJoes all you can eat098765'; joesStr.match(rePattern); //returns ["aaaAAAaaEat at Joes123454321", "aAaAJoes all you can eat0"] //without the 'g' after the closing '/' it would just stop at the first match and return: //["aaaAAAaaEat at Joes123454321"] 

当然,我已经详尽阐述了,但是我的观点只不过是这样的:

 /cat/ 

是一系列3个模式元素(一个东西跟着一个东西跟着一个东西)。

这也是:

 /[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/ 

正如regEx开始看起来那样古怪,这一切都是按照顺序依次相继发生的一系列事情(可能是多个字符的东西)。 一个基本的点,但一个花了我一段时间才能过去,所以我在这里解释它太过分了,因为我认为这是一个将帮助OP和其他新的regEx了解发生了什么。 读/写regEx的关键是把它分解成这些部分。

为了全局replace'/ r',这段代码为我工作。

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

只要修复你的replaceAt

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

我会把它叫做removeAt 。 🙂

它只适用于我用另一个字符replace它。 它不会简单地删除它。

这是因为当char等于""char.length是0,所以你的子串结合起来形成原始string。 与您的代码尝试,以下将工作:

 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 ^ } 
  • DEMO

如果它始终是你的string中的第四个字符,你可以尝试:

 yourString.replace(/^(.{4})(r)/, function($1, $2) { return $2; }); 

我不喜欢使用replacefunction从string中删除字符。 这样是不合逻辑的 。 通常我用C#编程(Sharp),每当我想从string中删除字符时,我都使用String类的Remove方法,但是没有Replace方法,即使它存在,因为当我要删除的时候,没有取代。 这是合乎逻辑的!

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

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

和/或你也可以使下面的函数删除开始索引和计数的字符,就像C#方法第二次重载String.Remove(int startIndex,int count):

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

然后你可以使用这两个function或其中一个为您的需要!

例:

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

search谷歌或在interent冲浪,并检查如果JavaScript允许你做空字符,如C#的。 如果是,那么学习如何做,也许replaceAt函数终于可以工作了,你就可以实现你想要的!

最后这个'r'字将被删除!

 return this.substr(0, index) + char + this.substr(index + char.length); 

char.length是零。 在这种情况下,您需要添加1以跳过字符。