แทนที่ช่องว่างด้วยขีดล่างใน JavaScript?


353

ฉันกำลังพยายามใช้รหัสนี้เพื่อแทนที่ช่องว่างด้วย _ มันใช้งานได้กับช่องว่างแรกในสตริง แต่ช่องว่างอื่น ๆ ทั้งหมดยังคงไม่เปลี่ยนแปลง ใครรู้ว่าทำไม

function updateKey()
{
    var key=$("#title").val();
    key=key.replace(" ","_");
    $("#url_key").val(key);
}

คำตอบ:


694

ลอง .replace(/ /g,"_");

แก้ไข : หรือ.split(' ').join('_')ถ้าคุณมีความเกลียดชังต่อ REs

แก้ไข : John Resig กล่าวว่า :

หากคุณกำลังค้นหาและแทนที่ด้วยสตริงที่มีการค้นหาแบบสแตติกและแบบสแตติกแทนที่มันจะเร็วกว่าในการดำเนินการกับ. split ("จับคู่") เข้าร่วม ("แทนที่") - ซึ่งดูเหมือนว่าง่าย วิธีนั้นในเบราว์เซอร์ที่ทันสมัยที่สุด (มีการเปลี่ยนแปลงเกิดขึ้นเพื่อปรับปรุงประสิทธิภาพของ. แทนที่ (/ จับคู่ / g, "แทนที่") ใน Firefox เวอร์ชันถัดไปดังนั้นคำสั่งก่อนหน้านี้จะไม่เกิดขึ้นอีกนาน)


1
มีวิธีการทำเช่นนี้โดยไม่ regexp หรือไม่
คลิกโหวต

14
.split ('') .join ('_')
Crescent Fresh

7
แทนที่จะ/ /gใช้งาน/\ /g- ทั้งสองทำงานใน Javascript หลังทำงานใน CoffeeScript ยัง
Tom Leys

27
ขณะที่ปี 2015 เป็นเร็วกว่า.replace(/ /g,"_"); .split(' ').join('_')
Gabriel Tomitsuka

8
ในอนาคตคนที่กำลังดู @Inez นี้มีลิงก์เพื่อทดสอบความเร็วในการแยก / เข้าร่วม VS แทนที่ เมื่อถึงปลายปี 2561 การแทนที่จะเร็วกว่ามาก
ricks


58

เพื่อตอบคำถามของ Prasanna ด้านล่าง:

คุณจะแทนที่ช่องว่างหลายช่องด้วยช่องว่างเดียวใน Javascript ได้อย่างไร

คุณจะใช้ฟังก์ชันเดียวกันreplaceกับนิพจน์ทั่วไปที่แตกต่างกัน นิพจน์สำหรับช่องว่างคือ\sและนิพจน์สำหรับ "1 ครั้งหรือมากกว่า" เป็น+เครื่องหมายบวกดังนั้นคุณเพียงแค่แทนที่คำตอบของอดัมด้วยต่อไปนี้:

key=key.replace(/\s+/g,"_");

30

คุณสามารถลองสิ่งนี้

 var str = 'hello     world  !!';
 str = str.replace(/\s+/g, '-');

มันจะแทนที่ช่องว่างหลายรายการด้วย '-' เดียว


3
อาจเป็นที่น่าสังเกตว่า: สิ่งนี้จะตัดแถบแท็บช่องว่างอื่น ๆ ด้วย
Berry M.

18

ฉันสร้างการทดสอบประสิทธิภาพ JS สำหรับhttp://jsperf.com/split-and-join-vs-replace2


1
ดูเหมือนว่าทุกวันนี้การแทนที่เป็นตัวเลือกโดยรวมที่ดีกว่า
Houman

Kave - อะไรนะ? แม้ว่าเบราว์เซอร์ทั้งหมดจะไม่เท่ากันแบ่ง / เข้าร่วมโดยเฉลี่ยจะดีกว่ามาก ในความเป็นจริงในเบราว์เซอร์สมัยใหม่จำนวนมากมันเป็นน้ำเสียงดีกว่า ขอบคุณ Inez สำหรับการตั้งค่านี้!
David Hobs

4
น้อยกว่าหนึ่งปีต่อมาในขณะนี้และเรียกใช้การทดสอบข้างต้นใน Chrome 32.0.1700.107 .. str.replace () ให้ผลลัพธ์ที่ดีกว่า (เร็วขึ้น 64%)
jenovachild

12

แทนที่ช่องว่างด้วยขีดล่าง

var str = 'How are you';
var replaced = str.split(' ').join('_');

ผลลัพธ์: How_are_you


3

ฉันรู้ว่านี้เป็นรุ่นเก่า แต่ผมไม่เห็นใครพูดถึงการขยาย prototypeString

String.prototype.replaceAll = function(search, replace){
    if(!search || !replace){return this;} //if search entry or replace entry empty return the string
    return this.replace(new RegExp('[' + search + ']', 'g'), replace); //global RegEx search for all instances ("g") of your search entry and replace them all.
};

1
คุณไม่เห็นใครทำเพราะเป็นความคิดที่แย่มาก ลองดูคำถาม SO อื่น ๆ เพิ่มเติม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.