2012-02-16 14 views
15

के अलावा सभी वर्णों को प्रतिस्थापित करें, मैं जावास्क्रिप्ट का उपयोग करके स्ट्रिंग में 0-9 के अलावा सभी वर्णों को प्रतिस्थापित करना चाहता हूं।जावास्क्रिप्ट रेगेक्स, संख्या

यह रेगेक्स क्यों काम नहीं करेगा?

"a100.dfwe".replace(/([^0-9])+/i, "") 

उत्तर

30

आप को बदलने के लिए हर घटना /g संशोधक की जरूरत है:

"a100.dfwe".replace(/[^0-9]+/g, ""); 

मैं भी बेमानी i संशोधक हटा दिया और अप्रयुक्त कैप्चरिंग उप अभिव्यक्ति आप के लिए धनुकोष्ठक। के रूप में अन्य लोगों ने बताया है, तो आप भी इसे आगे भी छोटा करने के लिए \D उपयोग कर सकते हैं:

"a100.dfwe".replace(/\D+/g, ""); 
+0

धन्यवाद, और "+" के लिए खड़े वास्तव में क्या करता है? –

+0

@ प्रभाशमन: इसका मतलब है * पिछले वर्णों में से एक या अधिक से मेल खाता है *। इसकी आवश्यकता नहीं है, लेकिन यह आवश्यक प्रतिस्थापन की संख्या को कम करके नियमित अभिव्यक्ति के प्रदर्शन को थोड़ा बढ़ा देगा। –

+0

(तकनीकी रूप से यह उत्तर, प्रश्न का उत्तर देता है, लेकिन फ्लोट पर विफल रहता है) "123.456px"। जगह (/ \ D +/g, ""); -> 123456 –

17

\D का अर्थ है "नहीं अंकों":

"a100.dfwe".replace(/\D/g, "") 
+0

अधिकांश कॉम्पैक्ट फॉर्म। – Oybek

1

यह काम नहीं करता है क्योंकि चरित्र वर्ग [^0-9] (= कुछ भी अंक के साथ) पुनरावृत्ति संशोधक + केवल "एएए" जैसे गैर-संख्यात्मक वर्णों के एक अनुक्रम से मेल खाता है।

अपने उद्देश्य के लिए, /g संशोधक का उपयोग के रूप में अन्य सुझाव है (विश्व स्तर पर सभी मैचों को बदलने के लिए), और आप भी [^0-9] के बजाय पूर्व निर्धारित चरित्र वर्ग \D (= अंक नहीं) इस्तेमाल कर सकते हैं, जो में परिणाम होगा अधिक संक्षिप्त रेगेक्स /\D+/

+0

इसे बेहतर समझने के लिए "ए" और ".dfwe" एक समूह के अंतर्गत नहीं आना चाहिए, क्योंकि यह 1 और अधिक है। –

+3

'\ D +' कहता है "एक या अधिक गैर-अंकों की तलाश करें", जबकि '(\ D) +' (एक ही) गैर-अंकों की एक या अधिक पुनरावृत्ति की तलाश करता है, जो आप नहीं चाहते हैं। अब, चाहे आप '/ \ D/g' (प्रत्येक एकल गैर-अंक को प्रतिस्थापित करें), या'/\ D +/g' (गैर-अंकों के प्रत्येक अनुक्रम को प्रतिस्थापित करें) वास्तव में प्रदर्शन के संदर्भ में वास्तव में कोई फर्क नहीं पड़ता , जो तब तक ध्यान देने योग्य नहीं होगा जब तक आप हजारों तारों को संसाधित नहीं करते। – fanaugen

+0

आह बहुत बहुत धन्यवाद। यह चीजों को पूरी तरह से बताता है। धन्यवाद ! –

2

ऋणात्मक संख्याओं के बारे में क्या:

एंडी ई के उदाहरण का उपयोग काम करता है जब तक आप एक नकारात्मक संख्या है। फिर यह '-' प्रतीक को भी आपको हमेशा सकारात्मक संख्या के साथ छोड़ देता है (जो ठीक हो सकता है)। मैं निम्नलिखित सुझाव है कि आप 0 से कम संख्या रखना चाहते हैं लेकिन अगर:

"a-100.dfwe".replace(/(?!-)[^0-9.]/g, "") //equals -100 

लेकिन, सावधान रहना है क्योंकि यह सब छोड़ देंगे '-' प्रतीकों, तो आपको एक त्रुटि दे रही है अपने पाठ "की तरह लग रहा है -a- अगर 100.dfwe "

+0

वह वास्तव में संख्याओं के समूह, संख्याओं के समूह के बारे में बात नहीं कर रहा है। वैसे भी, आपका regex अभी भी '-' से मेल खाता है क्योंकि यह स्ट्रिंग की शुरुआत में नहीं है। –

0

@ user3324764 के उत्तर के आधार पर - एक प्रोटोटाइप फ़ंक्शन बनाएं और संख्या को किसी संख्या में रूपांतरित करें।

String.prototype.extractNumber = function() 
{ 
    return Number(this.replace(/(?!-)[^0-9.]/g, "")); 
}; 

उदाहरण:

"123.456px".extractNumber(); // 123.456 
संबंधित मुद्दे