यह मेरा एक पुराना पद है, स्वीकृत उत्तर अधिकांश भाग के लिए अच्छे हैं। हालांकि मैंने प्रत्येक समाधान को बेंचमार्क करने का फैसला किया और एक और स्पष्ट (केवल मनोरंजन के लिए)। मुझे आश्चर्य है कि अगर अलग-अलग आकार के तारों के साथ अलग-अलग ब्राउज़रों पर रेगेक्स पैटर्न के बीच अंतर था।
तो मूल रूप से मैं पर jsPerf का इस्तेमाल किया
- Chrome 65.0.3325 / विंडोज 10 0.0.0 में परीक्षण
- एज 16.16299.0 / विंडोज 10 0.0.0 में परीक्षण
रेगेक्स पैटर्न मैंने परीक्षण किया था
/[\W_]+/g
/[^a-z0-9]+/gi
/[^a-zA-Z0-9]+/g
मैंने उन्हें यादृच्छिक पात्रों की एक लंबी लंबाई के साथ लोड किया
- लंबाई 5000
- लंबाई 1000
- लंबाई 200
उदाहरण जावास्क्रिप्ट मैंने इस्तेमाल किया var newstr = str.replace(/[\W_]+/g," ");
प्रत्येक रन में प्रत्येक रेगेक्स पर 50 या अधिक नमूने शामिल थे, और मैं उन्हें प्रत्येक ब्राउज़र पर 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
सत्य जाना जाता है, दोनों ब्राउज़रों में रेगेक्स (विचलन को ध्यान में रखते हुए) लगभग अप्रभेद्य थे, हालांकि मुझे लगता है कि अगर यह इसे और भी अधिक बार चलाता है तो परिणाम थोड़ा और अधिक स्पष्ट हो जाएंगे (लेकिन बहुत अधिक नहीं)।
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
मैं इन परिणामों में बहुत अधिक नहीं ले सकता क्योंकि यह वास्तव में एक महत्वपूर्ण अंतर नहीं है, हम वास्तव में बता सकते हैं कि यह धीमा है: ओ। इसके अतिरिक्त मैं सुपर बोर हो गया था।
वैसे भी आप अपने स्वयं के लिए बेंचमार्क चला सकते हैं।
Jsperf बेंचमार्क यहाँ