ลบช่องว่างภายในสตริงในจาวาสคริปต์


108

ฉันได้อ่านคำถามนี้เกี่ยวกับการตัดแต่งจาวาสคริปต์พร้อมคำตอบ regex

จากนั้นฉันคาดว่าการตัดแต่งจะลบช่องว่างด้านในระหว่าง Hello และ World

function myFunction() {
    alert("Hello World ".trim());
}

แก้ไข

ทำไมฉันถึงคาดหวังแบบนั้น!?

ไร้สาระ! เห็นได้ชัดว่าการตัดแต่งไม่ได้ลบช่องว่างด้านใน! เฉพาะส่วนที่นำหน้าและต่อท้ายนั่นคือวิธีการตัดแต่งนี่เป็นคำถามที่ผิดมากขอโทษของฉัน


10
การตัดแต่งจะลบช่องว่างจากจุดเริ่มต้นและจุดสิ้นสุดของสตริง
Manse

3
การตัดแต่งจะลบช่องว่างจากก่อนและหลังสตริง Hello Worldถูก "ตัด" แล้ว
Rocket Hazmat

@limelights เพื่อแสดง "HelloWorld" แทน "Hello World"
Hernán Eche

4
@void: นั่นไม่ใช่ "การตัดแต่ง" แต่เป็นปัญหาที่แตกต่างกัน
Rocket Hazmat

ที่เกี่ยวข้องstackoverflow.com/questions/6623231/…
Adrien Be

คำตอบ:


244

สำหรับการใช้การลบอักขระเว้นวรรค

"hello world".replace(/\s/g, "");

สำหรับพื้นที่สีขาวทั้งหมดให้ใช้คำแนะนำของ Rocket ในความคิดเห็นด้านล่าง!


142
คุณอาจต้องการใช้.replace(/ /g, '')หากมีพื้นที่มากกว่าหนึ่งครั้ง
Rocket Hazmat

@ Rocket นั่นเป็นเรื่องจริงเพียงแค่ยังไม่ได้อัปเดตคำตอบ! ขอบคุณ! :)
Henrik Andersson

47
@ จูฮานะ: ถ้าคุณต้องการลบช่องว่างอื่น ๆ ด้วยให้ทำ: .replace(/\s/g, '').
Rocket Hazmat

12
@RocketHazmat ใช่! คำตอบที่ถูกต้อง! แม้ว่าจะมีประสิทธิภาพมากกว่าเล็กน้อย: str.replace (/ \ s + / g, '')
jackocnr

3
@PitchiahNatarajan \sจะจับคู่ช่องว่างแท็บและบรรทัดใหม่
Rocket Hazmat

8

อาจเป็นเพราะคุณลืม ดำเนินการแก้ปัญหาในคำตอบที่ได้รับการยอมรับ นั่นคือรหัสที่ทำให้ใช้trim()งานได้

อัพเดต

คำตอบนี้ใช้ได้กับเบราว์เซอร์รุ่นเก่าเท่านั้น เห็นได้ชัดว่าเบราว์เซอร์รุ่นใหม่รองรับtrim()โดยกำเนิด


2
ไม่จำเป็นต้องมีบางเบราว์เซอร์ในตัว :-P
Rocket Hazmat

1
ปัจจุบันอยู่ใน browers ที่ทันสมัยที่สุดในขณะนี้ -> kangax.github.com/es5-compat-table
Manse

2

คุณสามารถใช้ได้

"Hello World ".replace(/\s+/g, '');

trim()ลบเฉพาะช่องว่างต่อท้ายบนสตริง (แรกและสุดท้ายบนโซ่) ในกรณีนี้ regExp จะเร็วกว่าเนื่องจากคุณสามารถลบช่องว่างอย่างน้อยหนึ่งช่องในเวลาเดียวกันได้

หากคุณเปลี่ยนสตริงว่างแทนที่เป็น '$' ความแตกต่างจะชัดเจนขึ้นมาก:

var string= '  Q  W E   R TY ';
console.log(string.replace(/\s/g, '$'));  // $$Q$$W$E$$$R$TY$
console.log(string.replace(/\s+/g, '#')); // #Q#W#E#R#TY#

การเปรียบเทียบประสิทธิภาพ - /\s+/gเร็วกว่า ดูที่นี่: http://jsperf.com/s-vs-s


คำตอบที่ได้รับการยอมรับในขณะนี้จะเป็นสิ่งเดียวกัน โปรดนำเสนอการทดสอบที่เกี่ยวข้องซึ่งระบุว่าคำตอบนี้เร็วกว่าคำตอบที่มากกว่านาโนวินาที
ลิงนอกรีต

@HereticMonkey อัปเดต!
ArlanG

1

คุณสามารถใช้วิธีการแทนที่สตริงด้วยนิพจน์ทั่วไป

"Hello World ".replace(/ /g, "");

วิธีการแทนที่ () ส่งคืนสตริงใหม่โดยมีรูปแบบที่ตรงกันบางส่วนหรือทั้งหมดถูกแทนที่ด้วยการแทนที่ รูปแบบอาจเป็นสตริงหรือ RegExp

RegExp

  • / / - ช่องว่างการจับคู่นิพจน์ทั่วไป

  • g - ธงสากล ค้นหาการแข่งขันทั้งหมดแทนที่จะหยุดลงหลังจากนัดแรก

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