Подтвердить что ты не робот

Заменить последнее вхождение символа в строку

Есть ли простой способ в jQuery заменить последнее вхождение "_" (подчеркивание) в заданной строке?

4b9b3361

Ответ 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!

Ответ 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)