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

IT技术 javascript
2021-02-22 15:51:46

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

6个回答

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

假设字符串中存在要替换的字符,则不需要 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 推送所有内容。
2021-04-27 15:51:46
@Spudley 太真实了。然而,在这里,没有 jQuery 版本,任何 JS 答案都是不完整的 ;))
2021-04-30 15:51:46
“nor regex”.... 如果字符串不包含下划线,则此解决方案不起作用。正则表达式版本确实如此。如果不需要,您不能添加替换字符。
2021-05-15 15:51:46
@tedebus 请阅读问题。还有一些例子可以处理任何最后一个字符
2021-05-18 15:51:46
+1因为没有正则表达式&lastIndexOf(...)从 END 搜索 (更好的性能)所以当前接受的正则表达式甚至不能更快。
2021-05-20 15:51:46

那这个呢?

function replaceLast(x, y, z){
  var a = x.split("");
  a[x.lastIndexOf(y)] = z;
  return a.join("");
}

replaceLast("Hello world!", "l", "x"); // Hello worxd!

把事情简单化

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

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

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

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