जवाबों:
नियमित अभिव्यक्ति:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
यह '102' और '1948948' के अंदर दो तत्वों के साथ एक एरे को लौटाएगा। अपनी इच्छानुसार काम करो। यदि यह किसी से मेल नहीं खाता है तो यह अशक्त हो जाएगा।
उन्हें संक्षिप्त करने के लिए:
'something102asdfkj1948948'.match( numberPattern ).join('')
यह मानते हुए कि आप जटिल दशमलव के साथ काम नहीं कर रहे हैं, मुझे लगता है कि यह पर्याप्त होना चाहिए।
d, इसलिए.match(/\d+/g)
parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
आप सभी गैर-अंकीय वर्णों ( \Dया [^0-9]) को भी हटा सकते हैं :
let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');
console.log(word_Without_Numbers)
दशमलव अंश और ऋण चिह्न के साथ संख्या के लिए, मैं इस स्निपेट का उपयोग करता हूं:
var NUMERIC_REGEXP = /[-]{0,1}[\d]*[.]{0,1}[\d]+/g;
'2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP)
// return ["2.2", "3.1", "4", "-7.6"]
अपडेट: - 7/9/2018
एक उपकरण मिला जो आपको नियमित रूप से अभिव्यक्ति को संपादित करने की अनुमति देता है: जावास्क्रिप्ट नियमित अभिव्यक्ति पार्सर और विज़ुअलाइज़र ।
अपडेट करें:
यहाँ एक और है जिसके साथ आप रिब्यूगर डीबग भी कर सकते हैं: ऑनलाइन रेगेक्स टेस्टर और डीबगर ।
अपडेट करें:
एक और एक: RegExr ।
अपडेट करें:
यदि आप केवल अंक चाहते हैं:
var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714
अब आप अंकों को मिला लें
मुझे लगता है कि आप स्ट्रिंग से नंबर प्राप्त करना चाहते हैं। किस स्थिति में, आप निम्नलिखित का उपयोग कर सकते हैं:
// Returns an array of numbers located in the string
function get_numbers(input) {
return input.match(/[0-9]+/g);
}
var first_test = get_numbers('something102');
var second_test = get_numbers('something102or12');
var third_test = get_numbers('no numbers here!');
alert(first_test); // [102]
alert(second_test); // [102,12]
alert(third_test); // null
get_numbers/1स्ट्रिंग की एक सरणी देता है, संख्या नहीं। आपके उदाहरण के लिए, यह वापस आएगा: * ["102"]* ["102", "12"]* null
दिए गए उत्तर वास्तव में आपके प्रश्न से मेल नहीं खाते हैं, जो एक अनुगामी संख्या से जुड़ा हुआ है । यह भी याद रखें कि आपको एक स्ट्रिंग वापस मिल रही है; यदि आपको वास्तव में एक नंबर की आवश्यकता है, तो परिणाम दें:
item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);
यदि आप किसी वेब पेज पर संख्यात्मक आइटम आईडी के साथ काम कर रहे हैं, तो आपका कोड भी उपयोगी रूप से स्वीकार कर सकता है Element, इसके id(या इसके पहले माता-पिता के साथ id) से नंबर निकालकर ; यदि आपके पास एक Eventकाम है, तो आप उस Elementसे भी प्राप्त कर सकते हैं।
चेन डाचाओ द्वारा इस समय # 3 उत्तर IMO जाने का सही तरीका है यदि आप किसी भी प्रकार की संख्या पर कब्जा करना चाहते हैं, लेकिन नियमित अभिव्यक्ति से छोटा किया जा सकता है:
/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g
सेवा:
/-?\d*\.?\d+/g
उदाहरण के लिए, यह कोड:
"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)
यह सरणी उत्पन्न करता है:
["217","255","0","0","-0.8","-255","0","0","0","70.71"]
मैंने एमडीएन लीनियर ग्रेडिएंट उदाहरण दिया है, ताकि यह पूरी तरह से रेग्जिप का परीक्षण कर ले और यहां स्क्रॉल करने की आवश्यकता न हो। मुझे लगता है कि मैंने नकारात्मक संख्याओं, दशमलवों, इकाई प्रत्ययों जैसे पतन और%, असंगत कॉमा और अंतरिक्ष उपयोग, और पाठ "लिन-ग्रेड" के भीतर अतिरिक्त डॉट / अवधि और हाइफ़न / डैश पात्रों के संदर्भ में सभी संभावनाओं को शामिल किया है। "। कृपया मुझे बताएं कि क्या मुझे कुछ याद आ रहा है। केवल एक चीज जो मैं देख सकता हूं कि यह हैंडल नहीं करता है वह "0..8" जैसी बुरी तरह से बनाई गई दशमलव संख्या है।
यदि आप वास्तव में संख्याओं की एक सरणी चाहते हैं, तो आप संपूर्ण सरणी को कोड की एक ही पंक्ति में बदल सकते हैं:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
मेरा विशेष कोड, जो सीएसएस कार्यों को पार्स कर रहा है, को डॉट / पीरियड चरित्र के गैर-संख्यात्मक उपयोग के बारे में चिंता करने की आवश्यकता नहीं है, इसलिए नियमित अभिव्यक्ति और भी सरल हो सकती है:
/-?[\d\.]+/g
स्प्लिट और रेगेक्स का उपयोग करना:
var str = "fooBar0123".split(/(\d+)/);
console.log(str[0]); // fooBar
console.log(str[1]); // 0123
@ Syntle के उत्तर के अनुसार, यदि आपके पास केवल गैर-संख्यात्मक वर्ण हैं, तो आपको एक मिल जाएगा Uncaught TypeError: Cannot read property 'join' of null ।
यदि कोई मैच नहीं मिला है और खाली स्ट्रिंग लौटाएगा, तो यह त्रुटियों को रोक देगा:
('something'.match( /\d+/g )||[]).join('')
यदि आप डॉट / अल्पविराम से अलग किए गए नंबर भी चाहते हैं, तो:
\d*\.?\d*
या
[0-9]*\.?[0-9]*
आप अपने regexes का परीक्षण करने के लिए https://regex101.com/ का उपयोग कर सकते हैं ।