【问题标题】:Replace last occurrence of character in string替换字符串中最后一次出现的字符
【发布时间】:2011-07-26 17:18:50
【问题描述】:

在 javascript 中是否有一种简单的方法来替换给定字符串中最后出现的“_”(下划线)?

【问题讨论】:

标签: javascript


【解决方案1】:

假设要替换的字符存在于字符串中,则不需要 jQuery 或正则表达式

替换字符串中的最后一个字符

str = str.substring(0,str.length-2)+otherchar

替换字符串中的最后一个下划线

var pos = str.lastIndexOf('_');
str = str.substring(0,pos) + otherchar + str.substring(pos+1)

或使用其他答案中的正则表达式之一

var str1 = "Replace the full stop with a questionmark."
var str2 = "Replace last _ with another char other than the underscore _ near the end"

// Replace last char in a string

console.log(
  str1.substring(0,str1.length-2)+"?"
)  
// alternative syntax
console.log(
  str1.slice(0,-1)+"?"
)

// Replace last underscore in a string 

var pos = str2.lastIndexOf('_'), otherchar = "|";
console.log(
  str2.substring(0,pos) + otherchar + str2.substring(pos+1)
)
// alternative syntax

console.log(
  str2.slice(0,pos) + otherchar + str2.slice(pos+1)
)

【讨论】:

  • +1 表示“不需要 jQuery”。重要的是要知道不是 JQuery 不是所有问题的答案。 Javascript 是一种功能完善的编程语言,无需通过 jquery 推送所有内容。
  • @Spudley 如此真实。然而在这里,没有 jQuery 版本的 JS 答案是不完整的;))
  • +1 for no regex & lastIndexOf(...) 从 END 开始搜索(性能更好)所以当前接受的正则表达式甚至不能更快。
  • "nor regex".... 如果字符串不包含下划线,此解决方案将不起作用。正则表达式版本可以。如果不需要,您不能添加替换字符。
  • @tedebus 请阅读问题。还有一些例子可以处理任何最后一个字符
【解决方案2】:

你不需要 jQuery,只需要一个正则表达式。

这将删除最后一个下划线:

var str = 'a_b_c';
console.log(  str.replace(/_([^_]*)$/, '$1')  ) //a_bc

这将用变量replacement的内容替换它:

var str = 'a_b_c',
    replacement = '!';

console.log(  str.replace(/_([^_]*)$/, replacement + '$1')  ) //a_b!c

【讨论】:

  • @Martin Jespersen:如果要替换的文本不是下划线而是名为 replaceMe 的变量的内容怎么办?应该如何修改正则表达式?
  • @Pierpaolo:您必须使用new RegExp 创建正则表达式,在此处阅读所有相关信息:developer.mozilla.org/en-US/docs/JavaScript/Guide/… - 请记住转义 replaceMe 变量,使其不包含特殊会改变正则表达式的字符
  • @Martin Jespersen:感谢您的链接。我已经知道new RegExp 语法。我的问题更像是“我应该把变量 replaceMe 放在哪里”?例如:var aRegExpr = new RegExp("_([^"+replaceMe+"]*)$");
  • @Pierpaolo:它不是那么简单,因为你可以在变量中有一个单词而不仅仅是一个字符 - 你应该开始一个关于它的新问题 :) 这里的评论太复杂了
  • 谢谢。我明白了,我会搜索是否已经有。
【解决方案3】:

反转字符串,替换字符,反转字符串。

这是一篇在 javascript 中反转字符串的帖子:How do you reverse a string in place in JavaScript?

【讨论】:

    【解决方案4】:

    保持简单

    var someString = "a_b_c";
    var newCharacter = "+";
    
    var newString = someString.substring(0, someString.lastIndexOf('_')) + newCharacter + someString.substring(someString.lastIndexOf('_')+1);
    

    【讨论】:

      【解决方案5】:

      您可以使用此代码

      var str="test_String_ABC";
      var strReplacedWith=" and ";
      var currentIndex = str.lastIndexOf("_");
      str = str.substring(0, currentIndex) + strReplacedWith + str.substring(currentIndex + 1, str.length);
      
      alert(str);

      【讨论】:

        【解决方案6】:

        这个怎么样?

        function replaceLast(x, y, z){
          var a = x.split("");
          a[x.lastIndexOf(y)] = z;
          return a.join("");
        }
        
        replaceLast("Hello world!", "l", "x"); // Hello worxd!
        

        【讨论】:

          【解决方案7】:

          这与 mplungjan 的答案非常相似,但可能更容易一些(特别是如果您需要立即进行其他字符串操作并希望将其保留为数组) 无论如何,我只是想我会把它放在那里以防有人喜欢它。

          var str = 'a_b_c';
          str = str.split(''); //['a','_','b','_','c']
          str.splice(str.lastIndexOf('_'),1,'-'); //['a','_','b','-','c']
          str = str.join(''); //'a_b-c'

          “_”可以换成你想替换的字符

          并且'-'可以替换为你想替换的字符或字符串

          【讨论】:

            【解决方案8】:

                // Define variables
                let haystack = 'I do not want to replace this, but this'
                let needle = 'this'
                let replacement = 'hey it works :)'
                
                // Reverse it
                haystack = Array.from(haystack).reverse().join('')
                needle = Array.from(needle).reverse().join('')
                replacement = Array.from(replacement).reverse().join('')
                
                // Make the replacement
                haystack = haystack.replace(needle, replacement)
                
                // Reverse it back
                let results = Array.from(haystack).reverse().join('')
                console.log(results)
                // 'I do not want to replace this, but hey it works :)'

            【讨论】:

              【解决方案9】:

              另一种超级清晰的方法如下:

              let modifiedString = originalString
                 .split('').reverse().join('')
                 .replace('_', '')
                 .split('').reverse().join('')
              

              【讨论】:

                【解决方案10】:

                这是一种递归方式,可以删除多次出现的“endchar”:

                function TrimEnd(str, endchar) {
                  while (str.endsWith(endchar) && str !== "" && endchar !== "") {
                    str = str.slice(0, -1);
                  }
                  return str;
                }
                
                var res = TrimEnd("Look at me. I'm a string without dots at the end...", ".");
                console.log(res)

                【讨论】:

                • 这不是被问到的。我回答了所问的问题,我想我得到了你的反对。还有endsWith不兼容IE
                【解决方案11】:

                var someString = "(/n{})+++(/n{})---(/n{})$$$";
                var toRemove = "(/n{})"; // should find & remove last occurrence 
                
                function removeLast(s, r){
                  s = s.split(r)
                  return s.slice(0,-1).join(r) + s.pop()
                }
                
                console.log(
                  removeLast(someString, toRemove)
                )

                细分:

                s = s.split(toRemove)         // ["", "+++", "---", "$$$"]
                
                s.slice(0,-1)                 //  ["", "+++", "---"]   
                
                s.slice(0,-1).join(toRemove)  // "})()+++})()---"
                
                s.pop()                       //  "$$$"   
                

                【讨论】:

                  猜你喜欢
                  • 2011-04-19
                  • 1970-01-01
                  • 2013-05-15
                  • 1970-01-01
                  • 2014-06-13
                  • 1970-01-01
                  • 2022-01-13
                  相关资源
                  最近更新 更多