จะลบช่องว่างออกจากสตริงโดยใช้ JavaScript ได้อย่างไร


552

วิธีการลบช่องว่างในสตริง? ตัวอย่างเช่น

การป้อนข้อมูล:

'/var/www/site/Brand new document.docx'

เอาท์พุท:

'/var/www/site/Brandnewdocument.docx'

ทางออกของฉัน" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_

คำตอบ:


1224

นี้?

str = str.replace(/\s/g, '');

ตัวอย่าง

var str = '/var/www/site/Brand new document.docx';

document.write( str.replace(/\s/g, '') );


อัปเดต:ตามคำถามนี้สิ่งนี้:

str = str.replace(/\s+/g, '');

เป็นทางออกที่ดีกว่า มันสร้างผลลัพธ์เดียวกัน แต่ทำได้เร็วกว่า

Regex

\sเป็น regex สำหรับ "ช่องว่าง" และgเป็นธง "ทั่วโลก" ซึ่งหมายถึงการจับคู่ทั้งหมด\s(ช่องว่าง)

คำอธิบายที่ดีสำหรับ+สามารถพบได้ที่นี่

ในฐานะที่เป็นบันทึกย่อด้านข้างคุณสามารถแทนที่เนื้อหาระหว่างอัญประกาศเดี่ยวเป็นสิ่งที่คุณต้องการเพื่อให้คุณสามารถแทนที่ช่องว่างด้วยสตริงอื่น ๆ


@Gaurav ฉันค้นหาคำตอบที่คล้ายกันเกี่ยวกับ SO และฉันเห็น.replace(/\s+/g, '')บ่อยขึ้น มีความแตกต่างระหว่างสิ่งนั้นกับคำตอบของฉันหรือไม่?
Šime Vidas

ในกรณีนี้ไม่มีความแตกต่าง แต่ + จะใช้สำหรับการค้นหาอย่างน้อยหนึ่งเหตุการณ์ที่เกิดขึ้น
Gaurav

1
โง่ฉันฉันอยู่ภายใต้ความประทับใจที่.replace(' ','')จะทำงาน ชื่นชมมาก!
Andy Mercer

3
คำตอบเดิมที่เกี่ยวข้องกับ (ซึ่ง Sime เชื่อมโยงกับในการแก้ไขของเขา) +มีเพียง 60 โหวตถ้าใครต้องการเครดิตเขา / เธอเกินไปstackoverflow.com/a/5964427/4258817
Mousey

2
ระวังอย่าให้อัญประกาศ regex ของคุณโดยบังเอิญ.replace('/\s+/g', '')เพราะจะพยายามค้นหาสตริงตัวอักษรนั้น เรื่องนี้ทำให้ฉันสะดุดก่อน ...
RTF

75

var a = b = " /var/www/site/Brand new   document.docx ";

console.log( a.split(' ').join('') );
console.log( b.replace( /\s/g, '') ); 

สองวิธีในการทำเช่นนี้!


4
ฉันชอบการแยก () และเข้าร่วม ()
Eric Milliot-Martinez

2
แยก ('') และเข้าร่วมจะไม่ลบ \ n, \ t อักขระช่องว่างสีขาววิธีแก้ปัญหาอื่นคือ a.split ('') แผนที่ (c => c.trim ()) เข้าร่วม ('')
rab

36

SHORTEST และเร็วที่สุด :str.replace(/ /g, '');


เกณฑ์มาตรฐาน:

นี่คือผลลัพธ์ของฉัน - (2018.07.13) MacOs High Sierra 10.13.3 บน Chrome 67.0.3396 (64 บิต), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64 บิต)):

สตริงสั้น

สตริงสั้น ๆ คล้ายกับตัวอย่างจากคำถาม OP

ป้อนคำอธิบายรูปภาพที่นี่

ทางออกที่เร็วที่สุดสำหรับเบราว์เซอร์ทั้งหมดคือ/ /g(regexp1a) - Chrome 17.7M (การทำงาน / วินาที), Safari 10.1M, Firefox 8.8M ช้าที่สุดสำหรับเบราว์เซอร์ทั้งหมดคือsplit-joinทางออก เปลี่ยนเป็น\sหรือเพิ่ม+หรือiเพื่อ regexp ทำให้การประมวลผลช้าลง

สายยาว

สำหรับสตริงเกี่ยวกับผลลัพธ์ของอักขระประมาณ 3 ~ milion คือ:

  • regexp1a : Safari 50.14 ops / วินาที, Firefox 18.57, Chrome 8.95
  • regexp2b : Safari 38.39, Firefox 19.45, Chrome 9.26
  • แยกการเข้าร่วม : Firefox 26.41, Safari 23.10, Chrome 7.98,

คุณสามารถเรียกใช้ได้บนเครื่องของคุณ: https://jsperf.com/remove-string-spaces/1


1
ที่น่าสนใจคือวิธีการแบ่งเข้าร่วมเป็นวิธีที่เร็วที่สุดสำหรับฉันใน Firefox 73 ตามด้วย regexp1a ที่ช้ากว่า 53%
แฮ็

25

ทำตามคำตอบ @rsplak: จริง ๆ แล้วการใช้ split / join way เร็วกว่าการใช้ regexp ดูกรณีทดสอบประสิทธิภาพ

ดังนั้น

var result = text.split(' ').join('')

ทำงานได้เร็วกว่า

var result = text.replace(/\s+/g, '')

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


ในทางกลับกัน\s+จัดการกับอักขระช่องว่างที่หลากหลาย ท่ามกลางด้วย\nและ\tก็ยังตรงกับ\u00a0ตัวอักษรและนั่นคือสิ่งที่จะถูกเปิดในเมื่อได้รับข้อความโดยใช้ textDomNode.nodeValue

ดังนั้นฉันคิดว่าข้อสรุปที่นี่สามารถทำได้ดังนี้: ถ้าคุณต้องการแทนที่ช่องว่าง ' 'ให้ใช้ split / join หากมีสัญลักษณ์ที่แตกต่างกันของคลาสสัญลักษณ์ให้ใช้replace(/\s+/g, '')


1
มันไม่ way fasterมาก ทำการทดสอบและเร็วขึ้นเพียง 2.19% บน Firefox 61 ของฉัน
vsync


2
  var output = '/var/www/site/Brand new document.docx'.replace(/ /g, ""); 
    or
  var output = '/var/www/site/Brand new document.docx'.replace(/ /gi,"");

หมายเหตุ: แม้ว่าคุณจะใช้ 'g' หรือ 'gi' เพื่อลบช่องว่างทั้งคู่จะทำงานเหมือนกัน

หากเราใช้ 'g' ในฟังก์ชั่นแทนที่มันจะตรวจสอบการจับคู่ที่ตรงกัน แต่ถ้าเราใช้ 'gi' มันจะไม่สนใจขนาดตัวพิมพ์

สำหรับการอ้างอิงคลิกที่นี่


0

Regex + แทนที่ ()

แม้ว่า regex จะช้าลงในหลาย ๆ กรณีการใช้งานผู้พัฒนาจะจัดการกับสตริงเพียงครั้งเดียวดังนั้นการพิจารณาความเร็วนั้นไม่เกี่ยวข้อง แม้ว่า / / จะเร็วกว่า / \ s / แต่การมี '\ s' อธิบายสิ่งที่เกิดขึ้นกับนักพัฒนารายอื่นอาจชัดเจนยิ่งขึ้น

let string = '/var/www/site/Brand new document.docx';
let path = string.replace(/\s/g, '');
// path => '/var/www/site/Brandnewdocument.docx'

แยก () + เข้าร่วม ()

การใช้ Split + Join อนุญาตให้มีการจัดการสตริงเพิ่มเติม

let string = '/var/www/site/Brand new document.docx';
let path => string.split('').map(char => /(\s|\.)/.test(char) ? '/' : char).join('');
// "/var/www/site/Brand/new/document/docx";
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.