Чи є простий спосіб у javascript замінити останнє входження "_" (підкреслення) у даному рядку?
Чи є простий спосіб у javascript замінити останнє входження "_" (підкреслення) у даному рядку?
Відповіді:
Вам не потрібен 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
new RegExp, прочитайте все про це тут: developer.mozilla.org/en-US/docs/JavaScript/Guide/… - Не забудьте уникнути replaceMeзмінної, щоб вона не містила спеціальних символи, які змінять регулярний вираз
new RegExpсинтаксис. Моє запитання було більше схоже на "куди слід поставити змінну replaceMe"? наприклад: var aRegExpr = new RegExp("_([^"+replaceMe+"]*)$");
Не потрібно ні 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для жодного регулярного виразу & 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);
Переверніть рядок, замініть символ, поверніть рядок назад.
Ось допис про скасування рядка в javascript: Як змінити рядок на місці в JavaScript?
Це дуже схоже на відповідь 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)