Есть ли простой способ в jQuery заменить последнее вхождение "_" (подчеркивание) в заданной строке?
Заменить последнее вхождение символа в строку
Ответ 1
Вам не нужно jQuery, просто регулярное выражение.
Это приведет к удалению последнего подчеркивания:
var str = 'a_b_c';
str = str.replace(/_([^_]*)$/,'$1'); //a_bc
Это заменит его содержимым переменной replacement
:
var str = 'a_b_c', replacement = '!';
str = str.replace(/_([^_]*)$/,replacement+'$1'); //a_b!c
Ответ 2
Нет необходимости ни в 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)
)
Ответ 3
Как насчет этого?
function replaceLast(x, y, z){
var a = x.split("");
a[x.lastIndexOf(y)] = z;
return a.join("");
}
replaceLast("Hello world!", "l", "x"); // Hello worxd!
Ответ 4
Отмените строку, замените char, отмените строку.
Вот сообщение для изменения строки в javascript: Как вы меняете строку на JavaScript?
Ответ 5
Держите его простым
var someString = "a_b_c";
var newCharacter = "+";
var newString = someString.substring(0, someString.lastIndexOf('_')) + newCharacter + someString.substring(someString.lastIndexOf('_')+1);
Ответ 6
Это очень похоже на 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'
Ответ 7
Другой супер ясный способ сделать это может быть следующим:
let modifiedString = originalString .split('').reverse().join('') .replace('_', '') .split('').reverse().join('')
Ответ 8
Вы можете использовать этот код
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);
Ответ 9
// 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 :)'
Ответ 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)