นี่เป็นโพสต์เก่าของฉันคำตอบที่ได้รับการยอมรับนั้นดีสำหรับส่วนใหญ่ อย่างไรก็ตามฉันตัดสินใจที่จะเปรียบเทียบแต่ละโซลูชันและอีกวิธีหนึ่งที่ชัดเจน (เพื่อความสนุกสนาน) ฉันสงสัยว่ามีความแตกต่างระหว่างรูปแบบ regex ในเบราว์เซอร์ต่าง ๆ ที่มีสตริงขนาดต่างกันหรือไม่
โดยพื้นฐานแล้วฉันใช้jsPerfบน
- การทดสอบใน Chrome 65.0.3325 / Windows 10 0.0.0
- การทดสอบใน Edge 16.16299.0 / Windows 10 0.0.0
รูปแบบนิพจน์ทั่วไปที่ฉันทดสอบคือ
- /[\W_]+/g
- /[^a-z0-9]+/gi
- /[^a-zA-Z0-9]+/g
ฉันโหลดมันขึ้นมาด้วยความยาวสตริงของอักขระสุ่ม
- ความยาว 5,000
- ความยาว 1,000
- ความยาว 200
ตัวอย่างจาวาสคริปต์ที่ฉันใช้ var newstr = str.replace(/[\W_]+/g," ");
การรันแต่ละครั้งประกอบด้วยตัวอย่าง 50 รายการขึ้นไปในแต่ละ regex และฉันเรียกใช้ 5 ครั้งในแต่ละเบราว์เซอร์ 
มาแข่งม้าของเรากัน!
ผล
                                Chrome                  Edge
Chars   Pattern                 Ops/Sec     Deviation   Op/Sec      Deviation
------------------------------------------------------------------------
5,000   /[\W_]+/g                19,977.80  1.09         10,820.40  1.32
5,000   /[^a-z0-9]+/gi           19,901.60  1.49         10,902.00  1.20
5,000   /[^a-zA-Z0-9]+/g         19,559.40  1.96         10,916.80  1.13
------------------------------------------------------------------------
1,000   /[\W_]+/g                96,239.00  1.65         52,358.80  1.41
1,000   /[^a-z0-9]+/gi           97,584.40  1.18         52,105.00  1.60
1,000   /[^a-zA-Z0-9]+/g         96,965.80  1.10         51,864.60  1.76
------------------------------------------------------------------------
  200   /[\W_]+/g               480,318.60  1.70        261,030.40  1.80
  200   /[^a-z0-9]+/gi          476,177.80  2.01        261,751.60  1.96
  200   /[^a-zA-Z0-9]+/g        486,423.00  0.80        258,774.20  2.15
เป็นที่ทราบกันดีอยู่แล้วว่า Regex ในเบราว์เซอร์ทั้งสอง (โดยคำนึงถึงค่าเบี่ยงเบน) นั้นแทบจะแยกไม่ออกอย่างไรก็ตามฉันคิดว่าถ้ามันทำงานมากขึ้นหลายครั้งผลลัพธ์จะชัดเจนขึ้นเล็กน้อย (แต่ไม่มาก) 
มาตราส่วนตามทฤษฎีสำหรับ 1 อักขระ
                            Chrome                        Edge
Chars   Pattern             Ops/Sec     Scaled            Op/Sec    Scaled
------------------------------------------------------------------------
5,000   /[\W_]+/g            19,977.80  99,889,000       10,820.40  54,102,000
5,000   /[^a-z0-9]+/gi       19,901.60  99,508,000       10,902.00  54,510,000
5,000   /[^a-zA-Z0-9]+/g     19,559.40  97,797,000       10,916.80  54,584,000
------------------------------------------------------------------------
1,000   /[\W_]+/g            96,239.00  96,239,000       52,358.80  52,358,800
1,000   /[^a-z0-9]+/gi       97,584.40  97,584,400       52,105.00  52,105,000
1,000   /[^a-zA-Z0-9]+/g     96,965.80  96,965,800       51,864.60  51,864,600
------------------------------------------------------------------------
  200   /[\W_]+/g           480,318.60  96,063,720      261,030.40  52,206,080
  200   /[^a-z0-9]+/gi      476,177.80  95,235,560      261,751.60  52,350,320
  200   /[^a-zA-Z0-9]+/g    486,423.00  97,284,600      258,774.20  51,754,840
ฉันจะไม่ใช้เวลามากในผลลัพธ์เหล่านี้เพราะนี่ไม่ใช่ความแตกต่างที่สำคัญจริงๆทั้งหมดที่เราบอกได้คือ edge ช้ากว่า: o นอกจากนี้ฉันยังเบื่อสุด ๆ  
อย่างไรก็ตามคุณสามารถเรียกใช้เกณฑ์มาตรฐานสำหรับตัวคุณเองได้
Jsperf Benchmark ที่นี่