2013-06-25 8 views
11
function putComma(price) { 
    return price.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ","); 
} 

यह कम से कम 4 अंकों पर अल्पविराम डालने के लिए एक काम करने वाला स्निपेट है।"/ B (? = (?: D {3}) + (?! D))/g" संख्याओं पर अल्पविराम जोड़ने के लिए कैसे काम करता है?

लेकिन यह कैसे ->/\B(?=(?:\d{3})+(?!\d))/g बताता है कि एक संख्या कम से कम 4 अंक है?

+3

यह रेगेक्स है, यदि आप वास्तव में इस बारे में परवाह करते हैं तो आपको इसके बारे में अधिक जानना चाहिए। [यह एक अच्छी शुरुआत हो सकती है] (http://www.regular-expressions.info/) – musefan

+0

यदि आप नियमित अभिव्यक्तियों की खोज करते हैं, और कुछ ट्यूटोरियल पढ़ते हैं, तो आप इसे कुछ घंटों में समझने में सक्षम होना चाहिए अधिकांश! – adeneo

+8

सुझाव के लिए धन्यवाद, लेकिन सभी लोगों के पास ट्यूटोरियल पढ़ने के लिए पर्याप्त निष्क्रिय समय नहीं है। –

उत्तर

19

टिप्पणियों की तरह, reading about regular expressions आपके लिए (लंबे समय तक) के लिए सबसे फायदेमंद होगा।

  1. \B यह बताता है (अर्थात यह शब्द का एक और प्रकार का हिस्सा नहीं हो सकता है एक शब्द सीमा के भीतर ही देखने के लिए - यह b123412b123 नहीं किया जा सकता है, लेकिन केवल: इस विशिष्ट नियमित अभिव्यक्ति का विश्लेषण करना जैसे है स्वीकार यह क्या पाता है अगर यह अकेला खड़ा - 123456, a 123456 w
  2. फिर एक अग्रदर्शी (?= यह बताता है जो कुछ भी समूह में है (जब तक यह मिलान समापन कोष्ठक तक पहुँच जाता है) और केवल अगर यह एक पूरे के रूप में पाया जाता है लौटने लगता है, यह है यह भी सुनिश्चित करना कि प्रतिस्थापन रिवर्स में किया गया है क्योंकि यह स्ट्रिंग के अंत तक बहुत आगे की ओर देख रहा है।
  3. ?: यह निम्नलिखित मैच देखने के लिए कहता है लेकिन बैकरेफर (नियमित अभिव्यक्तियों में एक शब्द) नहीं बनाते
  4. \d{3} एक पंक्ति में 3 अंक दिखता है।
  5. फिर + बाद में अंक मिलता है कि 3 अंक (यह सुनिश्चित करने के लिए कोष्ठक में लपेटा जाता है कि नियम को एक ब्लॉक के रूप में माना जाता है - (\d{3})+) पैटर्न दोहराया जा सकता है (3 अंक, 6, 9, आदि)।
  6. पिछले (?!\d) लग रहा है अभी तक एक और अंकों लेकिन के लिए यह को छोड़कर, कि 3.
तो मूल रूप से इसके लिए लग रहा है

के समूह में नहीं हैं यकीन है कि अंक 3 और नहीं के समूहों संख्याएं आती हैं में हैं बनाने 3 अंकों के 1 या अधिक समूह, RegEx मिलान किए गए अंकों को वापस करने के लिए नहीं बताते हैं (क्योंकि उन्हें ?: से अनदेखा किया जाता है) इसलिए केवल उस मैच का हिस्सा लौटा रहा है जो कुछ भी नहीं है - यह \B लौटा रहा है, और यही बदल रहा है। तो प्रभावी ढंग से यह केवल स्ट्रिंग के अंत से शुरू होने वाले 3 के पूर्ण समूहों को प्रतिस्थापित करता है, जिससे 33333333,333,333 में बदल जाता है।

+6

समझने के लिए श्रीमान धन्यवाद। –

+1

रेगेक्स के अन्य हिस्सों के बारे में क्या? और वास्तव में "प्रतिस्थापित" क्या हो रहा है? निश्चित रूप से कोई भी अंक नहीं। मुझे लगता है कि आपका उत्तर अपूर्ण है – musefan

+1

विशिष्ट प्रश्न यह था कि यह 4 अंकों के हिस्से के बारे में कैसे जानता है - लेकिन मैं बाकी के बारे में एक मिनट में – casraf

संबंधित मुद्दे