在javascript中是否有一种简单的方法可以替换给定字符串中最后一次出现的'_'(下划线)?
它始终是字符串的最后一个字符吗?如果不是,请查看string.lastIndexOf(searchstring,start)
—
skarmats,2011年
在javascript中是否有一种简单的方法可以替换给定字符串中最后一次出现的'_'(下划线)?
Answers:
new RegExp,在这里阅读所有内容:developer.mozilla.org/en-US/docs/JavaScript/Guide/…-请记住对replaceMe变量进行转义,因此它不包含特殊字符会改变正则表达式的字符
new RegExp语法了。我的问题更像是“我应该在哪里放置变量replaceMe”?例如: var aRegExpr = new RegExp("_([^"+replaceMe+"]*)$");
假设您要替换的字符存在于字符串中,则无需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)
)
+1对于没有正则表达式和lastIndexOf(...)不从END搜索 (更好的性能),所以目前公认的正则表达式甚至不能更快。
那这个呢?
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);
这与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'
可以将“ _”替换为要替换的字符
并且可以将“-”替换为要替换为的字符或字符串
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() // "$$$"
您可以使用此代码
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);
// 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 :)'
这是一种递归方式,可消除多次出现的“ 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)