Có cách nào dễ dàng trong javascript để thay thế sự xuất hiện cuối cùng của dấu '_' (dấu gạch dưới) trong một chuỗi nhất định không?
Có cách nào dễ dàng trong javascript để thay thế sự xuất hiện cuối cùng của dấu '_' (dấu gạch dưới) trong một chuỗi nhất định không?
Câu trả lời:
Bạn không cần jQuery, chỉ cần một biểu thức chính quy.
Thao tác này sẽ xóa dấu gạch dưới cuối cùng:
var str = 'a_b_c';
console.log( str.replace(/_([^_]*)$/, '$1') ) //a_bc
Điều này sẽ thay thế nó bằng nội dung của biến replacement:
var str = 'a_b_c',
replacement = '!';
console.log( str.replace(/_([^_]*)$/, replacement + '$1') ) //a_b!c
new RegExp, đọc tất cả về nó ở đây: developer.mozilla.org/en-US/docs/JavaScript/Guide/… - Hãy nhớ thoát khỏi replaceMebiến để nó không chứa biến đặc biệt nhân vật mà sẽ làm thay đổi biểu thức chính quy
new RegExpcú pháp. Câu hỏi của tôi giống như "tôi nên đặt biến ReplaceMe" ở đâu? ví dụ: var aRegExpr = new RegExp("_([^"+replaceMe+"]*)$");
Không cần jQuery hoặc regex giả sử ký tự bạn muốn thay thế tồn tại trong chuỗi
Thay thế ký tự cuối cùng trong một chuỗi
str = str.substring(0,str.length-2)+otherchar
Thay thế dấu gạch dưới cuối cùng trong một chuỗi
var pos = str.lastIndexOf('_');
str = str.substring(0,pos) + otherchar + str.substring(pos+1)
hoặc sử dụng một trong các biểu thức chính quy từ các câu trả lời khác
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)
)
+1cho không regex & lastIndexOf(...)không tìm kiếm từ END (hiệu suất tốt hơn) để regexp chấp nhận hiện nay thậm chí có thể không được nhanh hơn.
Cái này thì sao?
function replaceLast(x, y, z){
var a = x.split("");
a[x.lastIndexOf(y)] = z;
return a.join("");
}
replaceLast("Hello world!", "l", "x"); // Hello worxd!
Giữ nó đơn giản
var someString = "a_b_c";
var newCharacter = "+";
var newString = someString.substring(0, someString.lastIndexOf('_')) + newCharacter + someString.substring(someString.lastIndexOf('_')+1);
Đảo ngược chuỗi, thay thế ký tự, đảo ngược chuỗi.
Đây là một bài đăng để đảo ngược một chuỗi trong javascript: Làm thế nào để bạn đảo ngược một chuỗi tại chỗ trong JavaScript?
Điều này rất giống với câu trả lời của mplungjan, nhưng có thể dễ dàng hơn một chút (đặc biệt là nếu bạn cần thực hiện thao tác chuỗi khác ngay sau đó và muốn giữ nó dưới dạng một mảng) Dù sao, tôi chỉ nghĩ rằng tôi sẽ đưa nó ra khỏi đó phòng khi ai đó thích nó.
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'
'_' Có thể được hoán đổi bằng ký tự mà bạn muốn thay thế
Và '-' có thể được thay thế bằng ký tự hoặc chuỗi mà bạn muốn thay thế bằng
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() // "$$$"
Bạn có thể sử dụng mã này
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 :)'
Đây là một cách đệ quy loại bỏ nhiều lần xuất hiện của "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)