วิธีการแทนที่เครื่องหมายทับไปข้างหน้าในสตริง JavaScript ทั่วโลก?
วิธีการแทนที่เครื่องหมายทับไปข้างหน้าในสตริง JavaScript ทั่วโลก?
คำตอบ:
สิ่งต่อไปนี้จะทำได้ แต่จะแทนที่เหตุการณ์เดียวเท่านั้น:
"string".replace('/', 'ForwardSlash');
สำหรับการแทนที่แบบโกลบอลหรือหากคุณต้องการนิพจน์ทั่วไปคุณก็ต้องหลีกเลี่ยงเครื่องหมายทับ:
"string".replace(/\//g, 'ForwardSlash');
"string".replace('/', 'ForwardSlash', 'g')แต่นั่นไม่ใช่อาร์กิวเมนต์ที่ไม่ได้มาตรฐานซึ่งใช้ได้เฉพาะใน Firefox afaik
"string".replace(/\//g, 'ForwardSlash');ใช้งานได้ แต่ลบ / g ออกจากสิ่งนี้และไม่ได้ผล
/กรัมแสดงให้เห็นว่ามันเป็นทดแทนทั่วโลกเช่นแทนที่ทุกกรณีของการจับคู่ หากไม่มี g มันจะแทนที่อินสแตนซ์เดียวเท่านั้น และถ้าคุณลบออก/gคุณจะทำลาย regex อย่างสมบูรณ์ตั้งแต่สุดท้าย / เป็นตัวคั่นท้าย
ใช้ลิเทอรัล regex กับgตัวปรับแต่งและหลีกเลี่ยงเครื่องหมายทับไปข้างหน้าด้วยแบ็กสแลชเพื่อไม่ให้ขัดแย้งกับตัวคั่น
var str = 'some // slashes', replacement = '';
var replaced = str.replace(/\//g, replacement);
โดยไม่ใช้ regex (แม้ว่าฉันจะทำสิ่งนี้ก็ต่อเมื่อสตริงการค้นหาเป็นอินพุตของผู้ใช้):
var str = 'Hello/ world/ this has two slashes!';
alert(str.split('/').join(',')); // alerts 'Hello, world, this has two slashes!'
นี่คือสิ่งที่คุณต้องการหรือไม่?
'string with / in it'.replace(/\//g, '\\');
นี้ได้ทำงานให้ฉันในการเปลี่ยนลงไปเพียงแค่"//""/"
str.replace(/\/\//g, '/');
คุณต้องปิดเครื่องหมายทับเพื่อหลีกเลี่ยงปัญหาข้ามเบราว์เซอร์หรือ // แสดงความคิดเห็น
str = 'this/that and/if';
var newstr = str.replace(/[/]/g, 'ForwardSlash');
สวัสดีการแก้ไขเล็กน้อยในสคริปต์ด้านบน .. สคริปต์ด้านบนข้ามอักขระตัวแรกเมื่อแสดงผลลัพธ์
function stripSlashes(x)
{
var y = "";
for(i = 0; i < x.length; i++)
{
if(x.charAt(i) == "/")
{
y += "";
}
else
{
y+= x.charAt(i);
}
}
return y;
}
var str = '/questions'; // input: "/questions"
while(str.indexOf('/') != -1){
str = str.replace('/', 'http://stackoverflow.com/');
}
alert(str); // output: "http://stackoverflow.com/questions"
regex ที่เสนอ/\//gไม่ได้ผลสำหรับฉัน ส่วนที่เหลือของบรรทัด ( //g, replacement);) ถูกแสดงความคิดเห็น
นี่เป็นความคิดของ Christopher Lincolns แต่มีรหัสที่ถูกต้อง:
function replace(str,find,replace){
if (find != ""){
str = str.toString();
var aStr = str.split(find);
for(var i = 0; i < aStr.length; i++) {
if (i > 0){
str = str + replace + aStr[i];
}else{
str = aStr[i];
}
}
}
return str;
}
ตัวอย่างการใช้งาน:
var somevariable = replace('//\\\/\/sdfas/\/\/\\\////','\/sdf','replacethis\');
การแทนที่สตริงส่วนกลางของ Javascript มีความซับซ้อนโดยไม่จำเป็น ฟังก์ชันนี้ช่วยแก้ปัญหานั้นได้ อาจมีผลกระทบต่อประสิทธิภาพเล็กน้อย แต่ฉันมั่นใจว่ามันไม่สำคัญ
นี่เป็นอีกทางเลือกหนึ่งฟังก์ชันดูสะอาดกว่ามาก แต่โดยเฉลี่ยแล้วช้ากว่าฟังก์ชันข้างต้นประมาณ 25 ถึง 20 เปอร์เซ็นต์:
function replace(str,find,replace){
if (find !== ""){
str = str.toString().split(find).join(replace);
}
return str;
}
คุณสามารถสร้างRegExpวัตถุเพื่อให้อ่านง่ายขึ้น
str.replace(new RegExp('/'), 'foobar');
หากคุณต้องการแทนที่ทั้งหมดให้เพิ่ม"g"แฟล็ก
str.replace(new RegExp('/', 'g'), 'foobar');