วิธีการลบช่องว่างในสตริง? ตัวอย่างเช่น
การป้อนข้อมูล:
'/var/www/site/Brand new document.docx'
เอาท์พุท:
'/var/www/site/Brandnewdocument.docx'
วิธีการลบช่องว่างในสตริง? ตัวอย่างเช่น
การป้อนข้อมูล:
'/var/www/site/Brand new document.docx'
เอาท์พุท:
'/var/www/site/Brandnewdocument.docx'
คำตอบ:
นี้?
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
(ช่องว่าง)
คำอธิบายที่ดีสำหรับ+
สามารถพบได้ที่นี่
ในฐานะที่เป็นบันทึกย่อด้านข้างคุณสามารถแทนที่เนื้อหาระหว่างอัญประกาศเดี่ยวเป็นสิ่งที่คุณต้องการเพื่อให้คุณสามารถแทนที่ช่องว่างด้วยสตริงอื่น ๆ
.replace(/\s+/g, '')
บ่อยขึ้น มีความแตกต่างระหว่างสิ่งนั้นกับคำตอบของฉันหรือไม่?
.replace(' ','')
จะทำงาน ชื่นชมมาก!
+
มีเพียง 60 โหวตถ้าใครต้องการเครดิตเขา / เธอเกินไปstackoverflow.com/a/5964427/4258817
.replace('/\s+/g', '')
เพราะจะพยายามค้นหาสตริงตัวอักษรนั้น เรื่องนี้ทำให้ฉันสะดุดก่อน ...
var a = b = " /var/www/site/Brand new document.docx ";
console.log( a.split(' ').join('') );
console.log( b.replace( /\s/g, '') );
สองวิธีในการทำเช่นนี้!
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 คือ:
คุณสามารถเรียกใช้ได้บนเครื่องของคุณ: https://jsperf.com/remove-string-spaces/1
ทำตามคำตอบ @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, '')
way faster
มาก ทำการทดสอบและเร็วขึ้นเพียง 2.19% บน Firefox 61 ของฉัน
var input = '/var/www/site/Brand new document.docx';
//remove space
input = input.replace(/\s/g, '');
//make string lower
input = input.toLowerCase();
alert(input);
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' มันจะไม่สนใจขนาดตัวพิมพ์
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";
" ahm ed ".split('').filter(e => e.trim().length).join('')