替换字符串中最后出现的字符


Answers:


131

您不需要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


2
@Martin Jespersen:如果要替换的文本不是下划线而是变量replaceMe的内容,该怎么办?正则表达式应如何修改?
Pierpaolo 2012年

1
@Pierpaolo:您必须使用来创建regexp new RegExp,在这里阅读所有内容:developer.mozilla.org/en-US/docs/JavaScript/Guide/…-请记住对replaceMe变量进行转义,因此它不包含特殊字符会改变正则表达式的字符
Martin Jespersen 2012年

@Martin Jespersen:感谢您的链接。我已经知道new RegExp语法了。我的问题更像是“我应该在哪里放置变量replaceMe”?例如: var aRegExpr = new RegExp("_([^"+replaceMe+"]*)$");
Pierpaolo 2012年

@Pierpaolo:它不是那么简单,因为您可以在一个变量中有一个单词,而不仅仅是一个字符-您应该开始一个新的问题:)在这里评论太复杂了
Martin Jespersen

谢谢。我了解,我将搜索是否已经存在一个。
Pierpaolo 2012年

70

假设您要替换的字符存在于字符串中,则无需jQuery和regex

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

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


7
+1表示“不需要jQuery”。重要的是要知道不是JQuery不能解决所有问题。Javascript是一种功能强大的编程语言,无需通过jquery推送所有内容。
Spudley

1
@Spudley如此。但是在这里,没有jQuery版本,没有JS答案是完整的;))
mplungjan 2011年

4
+1对于没有正则表达式lastIndexOf(...)不从END搜索 (更好的性能),所以目前公认的正则表达式甚至不能更快。
jave.web 16/09/23

“ nor regex” ....如果字符串不包含下划线,则此解决方案不起作用。正则表达式版本。如果不需要,则不能添加替换字符。
tedebus

@tedebus请阅读问题。此外,有些示例还可以处理任何最后一个字符
mplungjan '19


3

把事情简单化

var someString = "a_b_c";
var newCharacter = "+";

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

3

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

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


1

这与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'

可以将“ _”替换为要替换的字符

并且可以将“-”替换为要替换为的字符或字符串


1

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()                       //  "$$$"   

0

您可以使用此代码

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


0

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


0

这是一种递归方式,可消除多次出现的“ 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不兼容
mplungjan '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.