बस संख्याओं को वापस करने के लिए जावास्क्रिप्ट का उपयोग करके Regex


129

अगर मेरे पास "कुछ 12" या "कुछ 102" जैसा एक तार है, तो मैं जावास्क्रिप्ट का उपयोग कैसे करूंगा, बस नंबर भागों को वापस करने के लिए जावास्क्रिप्ट में?

जवाबों:


226

नियमित अभिव्यक्ति:

var numberPattern = /\d+/g;

'something102asdfkj1948948'.match( numberPattern )

यह '102' और '1948948' के अंदर दो तत्वों के साथ एक एरे को लौटाएगा। अपनी इच्छानुसार काम करो। यदि यह किसी से मेल नहीं खाता है तो यह अशक्त हो जाएगा।

उन्हें संक्षिप्त करने के लिए:

'something102asdfkj1948948'.match( numberPattern ).join('')

यह मानते हुए कि आप जटिल दशमलव के साथ काम नहीं कर रहे हैं, मुझे लगता है कि यह पर्याप्त होना चाहिए।


3
अं। नाइट-पिकी से नफरत है, लेकिन यह एक सरणी देता है, वस्तु नहीं (कम से कम क्रोम में)।
मौस

14
सभी सरणियाँ ऑब्जेक्ट हैं हालांकि, नहीं?
मध्यरात्रि omuraliev

6
@MuhammadUmer - क्या आपने इसकी कोशिश की?
औसत दर्जे का

2
@ इससे पहले कि आप बैकस्लैश को याद कर रहे हैं d, इसलिए.match(/\d+/g)
omrieviev

10
@MuhammadUmer, @meder: आप दोनों को बलों को parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
मिलाना

199

आप सभी गैर-अंकीय वर्णों ( \Dया [^0-9]) को भी हटा सकते हैं :

let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');

console.log(word_Without_Numbers)


ठीक है, सिवाय इसके कि ओपी चाहता है "बस संख्या भागों," स्ट्रिंग नहीं।
स्कॉट फ्रेली

24

दशमलव अंश और ऋण चिह्न के साथ संख्या के लिए, मैं इस स्निपेट का उपयोग करता हूं:

 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

अपडेट करें:

Regexper और Regex Pal


सही, केवल समाधान जो दशमलव और नकारात्मक अंकों के साथ काम करता है
अरमाग्डन

17

यदि आप केवल अंक चाहते हैं:

var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714

अब आप अंकों को मिला लें


9

मुझे लगता है कि आप स्ट्रिंग से नंबर प्राप्त करना चाहते हैं। किस स्थिति में, आप निम्नलिखित का उपयोग कर सकते हैं:

// 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

1
बस इसे स्पष्ट करने के लिए, get_numbers/1स्ट्रिंग की एक सरणी देता है, संख्या नहीं। आपके उदाहरण के लिए, यह वापस आएगा: * ["102"]* ["102", "12"]* null
Sần Tr -n-Nguyễn

2

दिए गए उत्तर वास्तव में आपके प्रश्न से मेल नहीं खाते हैं, जो एक अनुगामी संख्या से जुड़ा हुआ है । यह भी याद रखें कि आपको एक स्ट्रिंग वापस मिल रही है; यदि आपको वास्तव में एक नंबर की आवश्यकता है, तो परिणाम दें:

item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);

यदि आप किसी वेब पेज पर संख्यात्मक आइटम आईडी के साथ काम कर रहे हैं, तो आपका कोड भी उपयोगी रूप से स्वीकार कर सकता है Element, इसके id(या इसके पहले माता-पिता के साथ id) से नंबर निकालकर ; यदि आपके पास एक Eventकाम है, तो आप उस Elementसे भी प्राप्त कर सकते हैं।


हालांकि यह एक निफ्टी उत्तर है, मुझे नहीं लगता कि अन्य उत्तर "वास्तव में [प्रश्न] से मेल नहीं खाते" हैं। वास्तव में अन्य उत्तर अधिक बहुमुखी हैं। वे अनुगामी संख्याओं के साथ-साथ मध्य में संख्याओं के साथ काम करेंगे। यह अनुमान लगाने के लिए एक सा है कि ओपी चाहता था कि वह केवल अनुगामी संख्याओं के साथ काम करे।
Xandor


2

चेन डाचाओ द्वारा इस समय # 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

2

स्प्लिट और रेगेक्स का उपयोग करना:

    var str = "fooBar0123".split(/(\d+)/);
    console.log(str[0]); // fooBar
    console.log(str[1]); // 0123

1

@ Syntle के उत्तर के अनुसार, यदि आपके पास केवल गैर-संख्यात्मक वर्ण हैं, तो आपको एक मिल जाएगा Uncaught TypeError: Cannot read property 'join' of null

यदि कोई मैच नहीं मिला है और खाली स्ट्रिंग लौटाएगा, तो यह त्रुटियों को रोक देगा:

('something'.match( /\d+/g )||[]).join('')


0

यदि आप डॉट / अल्पविराम से अलग किए गए नंबर भी चाहते हैं, तो:

\d*\.?\d*

या

[0-9]*\.?[0-9]*

आप अपने regexes का परीक्षण करने के लिए https://regex101.com/ का उपयोग कर सकते हैं ।


0

सब कुछ है कि अन्य समाधान है, लेकिन थोड़ा सत्यापन के साथ

// value = '675-805-714'
const validateNumberInput = (value) => { 
    let numberPattern = /\d+/g 
    let numbers = value.match(numberPattern)

    if (numbers === null) {
        return 0
    }  

    return parseInt(numbers.join([]))
}
// 675805714
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.