एक स्ट्रिंग से एक संख्या निकालें ("प्राप्त करें")


355

मेरे पास '# बॉक्स 2' जैसी जावास्क्रिप्ट में एक स्ट्रिंग है और मैं सिर्फ '2' चाहता हूं।

कोशिश की:

var thestring = $(this).attr('href');
var thenum = thestring.replace( /(^.+)(\w\d+\w)(.+$)/i,'$2');
alert(thenum);

यह अभी भी अलर्ट में # बॉक्स 2 देता है, मैं इसे कैसे काम कर सकता हूं?

इसे अंत में संलग्न किसी भी लंबाई की संख्या के लिए समायोजित करने की आवश्यकता है।


1
आप बस इस तरह कर सकते हैं। यह अच्छी तरह से काम करेगा। var थ्रस्ट्रिंग = $ (यह) .attr ('href'); var तत्सम = parsefloat (थ्रेस्ट्रिंग); चेतावनी (thenum);
विवेक शुक्ला

1
यह कोड मेरे लिए ठीक काम करता है लेकिन एक मामले में, मेरे पास एक स्ट्रिंग '2.5 / मील' है और मैं इसमें से 2.5 निकालना चाहता हूं। उपरोक्त कोड मुझे 2.5 के बजाय 25 देता है
बिजय सिंह

जवाबों:


578

इस विशिष्ट उदाहरण के लिए,

 var thenum = thestring.replace( /^\D+/g, ''); // replace all leading non-digits with nothing

सामान्य मामले में:

 thenum = "foo3bar5".match(/\d+/)[0] // "3"

चूंकि इस उत्तर ने किसी कारण से लोकप्रियता हासिल की, इसलिए यहां एक बोनस है: रेगेक्स जनरेटर।

function getre(str, num) {
  if(str === num) return 'nice try';
  var res = [/^\D+/g,/\D+$/g,/^\D+|\D+$/g,/\D+/g,/\D.*/g, /.*\D/g,/^\D+|\D.*$/g,/.*\D(?=\d)|\D+$/g];
  for(var i = 0; i < res.length; i++)
    if(str.replace(res[i], '') === num) 
      return 'num = str.replace(/' + res[i].source + '/g, "")';
  return 'no idea';
};
function update() {
  $ = function(x) { return document.getElementById(x) };
  var re = getre($('str').value, $('num').value);
  $('re').innerHTML = 'Numex speaks: <code>' + re + '</code>';
}
<p>Hi, I'm Numex, the Number Extractor Oracle.
<p>What is your string? <input id="str" value="42abc"></p>
<p>What number do you want to extract? <input id="num" value="42"></p>
<p><button onclick="update()">Insert Coin</button></p>
<p id="re"></p>


15
-1, "#box2_col3".replace( /^\D+/g, '')दिखाना चाहिए था 2, नहीं 2_col3
शिप्लू मोकादिम

2
@ shiplu.mokadd.im: मैं #box2_col3प्रश्न में कोई संदर्भ नहीं देखता हूं ।
georg

1
हां इसका कोई संदर्भ नहीं है #box2_col3। लेकिन रेगेक्स ओपी का उपयोग करें ( \w)(.+$)) देखें जो स्पष्ट रूप से इंगित करता है कि संख्या के बाद अन्य वर्ण हैं।
शिप्पू मोकादिम

3
उस स्थिति में आपका पैटर्न भी विफल हो जाता है अगर अंत से पहले नंबर है।
शिप्लू मोकादिम

2
आप replaceउपयोग करके अग्रणी संख्या के साथ काम कर सकते हैं : theString.replace(/^.*\D+/g, '');लेकिन shiplu.mokadd.im का समाधान बेहतर है।
LandonSchropp

225

आपको निम्नलिखित प्रयास करना चाहिए:

var txt = "#div-name-1234-characteristic:561613213213";
var numb = txt.match(/\d/g);
numb = numb.join("");
alert (numb);​

परिणाम

1234561613213213

1
अच्छा जवाब लेकिन क्या होगा अगर मुझे अलग से संख्याओं का सेट चाहिए। अर्थात 1234, 5616133 ...
अमर सिंह

या एक-लाइनर + पूर्णांक को पार्स करने के लिए:parseInt(txt.match(/\d/g).join(''), 10)
लुकास लाइसिस

" $ 20.0 ".match(/\d/g).join('') => "200" (सिर्फ कह रहा है)
vsync

91

मुझे लगता है कि यह नियमित अभिव्यक्ति आपके उद्देश्य की पूर्ति करेगी:

var num = txt.replace(/[^0-9]/g,'');

txtतुम्हारा तार कहाँ है

यह मूल रूप से किसी भी चीज़ को काट देता है जो कि एक अंक नहीं है।

मुझे लगता है कि आप इसे भी उपयोग करके एक ही चीज हासिल कर सकते हैं:

var num = txt.replace(/\D/g,'');

1
/[^0-9]/gपठनीयता के लिए +1। यहाँ भी अधिकांश उत्तरों के साथ प्रयोग किया जाता है: stackoverflow.com/q/1862130/1066234
काई नैक

58

निम्नलिखित का प्रयास करें: string.replace(/[^0-9]/g, '');यह सभी गैर-अंक वर्णों को हटा देगा, केवल स्ट्रिंग में अंक छोड़ देगा

function retnum(str) { 
    var num = str.replace(/[^0-9]/g, ''); 
    return parseInt(num,10); 
}

console.log('abca12bc45qw'.replace(/[^0-9]/g, ''));
console.log('#box2'.replace(/[^0-9]/g, ''));


2
यह स्वीकार किए गए उत्तर से बेहतर है, क्योंकि यह विश्व स्तर पर सभी गैर-संख्याओं को बदलता है और btw, के /[^0-9]/gसाथ प्रतिस्थापित किया जा सकता है /[^\d]/g
CPHPython

52

मैच फ़ंक्शन का उपयोग करना।

var thenum = thestring.match(/\d+$/)[0];
alert(thenum);

jsfiddle


1
इसके अलावा, आप इसे पूर्णांक बनाने के लिए unary '+' जोड़ सकते हैं = फिर thestring.match (/ \ d + $ /) [0];
सेर्गेई ओनिशेंको

मुझे लगता है कि यह> 1 अंकों की संख्या के लिए काम नहीं करता है? (मैं समझता हूं कि प्रश्न 1 अंकों की संख्या के लिए था, लेकिन मैं संख्याओं को देख रहा हूं> 10.)
फेलिक्स

@ निस्संदंद न अनुमान । अपने आप को आज़माएं। यहां तक ​​कि आपने फिडल को नहीं देखा।
शिप्लू मोकादिम

इसे प्रेम करें। तत्व को छूने या संशोधित किए बिना किसी चर में संख्या निकालने का सबसे सरल तरीका। मैं एक स्ट्रिंग के अंदर एक बहु संयोग के लिए प्रत्येक के साथ एक कॉम्बो की सराहना करता हूं। यानी स्ट्रिंग 12a55 अंतिम संख्या की रिपोर्ट करता है, सभी नहीं।
m3nda

1
@YevgeniyAfanasyev यह नहीं करना चाहिए। मूल प्रश्न की जाँच करें। विशेष रूप से अंतिम पंक्ति। संख्या अंत में होनी चाहिए।
शिप्लू मोकादिम

33

इस कोड के साथ ऊपर उद्धृत सभी संयोजनों की कोशिश की और यह काम कर गया, केवल एक ही था जिसने उस स्ट्रिंग पर काम किया ->(12) 3456-7890

var str="(12) 3456-7890";
str.replace( /\D+/g, '');

परिणाम: "1234567890"

अवलोकन: मुझे पता है कि इस तरह की एक स्ट्रिंग अटारी पर नहीं होगी लेकिन जो भी हो, समाधान बेहतर है, क्योंकि इसकी अधिक पूर्णता है।


मुझे लगता है कि str.match(/\d+/g).map(Number)यह बेहतर होगा कि यह एक सरणी लौटेगा
आर्टेम बर्नत्स्की 3

33

और यह एक स्निपेट है जो मुद्रा और प्रारूपण के साथ मूल्य निकालता है:

var price = "£1,739.12";
parseFloat(price.replace( /[^\d\.]*/g, '')); // 1739.12

13

आप महान parseInt विधि का उपयोग कर सकते हैं

यह अग्रणी अंकों को एक संख्या में बदल देगा

parseInt("-10px");
// will give you -10

18
यह केवल तभी काम करता है जब संख्या स्ट्रिंग की शुरुआत में होती है
रसज

2
इसकी वापसी NaN
अहमद सैयद


4

आप नियमित अभिव्यक्ति का उपयोग कर सकते हैं।

var txt="some text 2";
var numb = txt.match(/\d/g);
alert (numb);

जो 2 को अलर्ट करेगा।


4
-1 एकाधिक अंकों पर कब्जा नहीं किया जाएगा और चेतावनी में सरणी का उपयोग करने के लिए
Shiplu Mokaddim

4

नियमित अभिव्यक्तियों के साथ , एक स्ट्रिंग से नंबर कैसे प्राप्त करें, उदाहरण के लिए:

String myString = "my 2 first gifts were made by my 4 brothers";
myString = myString .replaceAll("\\D+","");
System.out.println("myString : " + myString);

myString" 24" का परिणाम है

आप इस रनिंग कोड का एक उदाहरण यहां देख सकते हैं: http://ideone.com/iOCf5G


5
जावा! == जावास्क्रिप्ट - रिप्लेसमेंट सभी मानक जावास्क्रिप्ट में मौजूद नहीं है। केवल कुछ पुस्तकालयों जैसे jQuery में वह विधि है। भविष्य में, आपको स्पष्ट करना चाहिए।
लेवी रॉबर्ट्स

3

आप निम्नलिखित के रूप में अंडरस्कोर स्ट्रिंग लाइब्रेरी का उपयोग कर सकते हैं

var common="#box"
var href="#box1"

_(href).strRight(common)

परिणाम होगा: 1

देखें: https://github.com/epeli/underscore.string

डेमो:
http://jsfiddle.net/abdennour/Vyqtt/
HTML कोड:

<p>
    <a href="#box1" >img1</a>
    <a href="#box2" >img2</a>
    <a href="#box3" >img3</a>
    <a href="#box4" >img4</a>
</p>
<div style="font-size:30px"></div>

जेएस कोड:

var comm="#box"
$('a').click(function(){
  $('div').html(_($(this).attr('href')).strRight(comm))})

यदि आपके पास निम्नलिखित के रूप में प्रत्यय है:

href="box1az" 

आप अगले डेमो का उपयोग कर सकते हैं:

http://jsfiddle.net/abdennour/Vyqtt/1/

function retrieveNumber(all,prefix,suffix){
 var left=_(all).strRight(prefix);
 return _(left).strLeft(suffix);

}

3

यहाँ एक सोल है। कोई डेटा नहीं के लिए जाँच करता है

var someStr = 'abc'; // add 123 to string to see inverse

var thenum = someStr.match(/\d+/);

if (thenum != null )
{
    console.log(thenum[0]);
}
else
{
 console.log('no number');
}

2

त्रुटियों के बिना स्ट्रिंग में पहला नंबर प्राप्त करने के लिए इस एक-लाइन कोड का उपयोग करें:

var myInt = parseInt(myString.replace(/^[^0-9]+/, ''), 10);

2

कृपया javaScripts के नीचे देखें, वहां आप केवल नंबर प्राप्त कर सकते हैं

var txt = "abc1234char5678#!9";
var str = txt.match(/\d+/g, "")+'';
var s = str.split(',').join('');
alert(Number(s));

आउटपुट: 1234567789


2

आप एक रेगेक्स एक्सप्रेशन का उपयोग करके स्ट्रिंग से नंबर निकाल सकते हैं:

let string = "xxfdx25y93.34xxd73";
let res = string.replace(/\D/g, "");
console.log(res); 

आउटपुट: 25933473


1
var elValue     = "-12,erer3  4,-990.234sdsd";

var isNegetive = false;
if(elValue.indexOf("-")==0) isNegetive=true;

elValue     = elValue.replace( /[^\d\.]*/g, '');
elValue     = isNaN(Number(elValue)) ? 0 : Number(elValue);

if(isNegetive) elValue = 0 - elValue;

alert(elValue); //-1234990.234

एक स्पष्टीकरण। उदाहरण के लिए आप इस रेगेक्स का उपयोग क्यों करते हैं।
मेंटलर्ज

1

यह उत्तर अधिकांश परिदृश्य को कवर करेगा। मैं इस स्थिति को पार कर सकता हूं जब उपयोगकर्ता फोन नंबर पेस्ट करने की कोशिश करता है

  $('#help_number').keyup(function(){
    $(this).val().match(/\d+/g).join("")
  });

स्पष्टीकरण:

str= "34%^gd 5-67 6-6ds"

str.match(/\d+/g)

यह आउटपुट के रूप में स्ट्रिंग की एक सरणी देगा >> ["34", "56766"]

str.match(/\d+/g).join("")

ज्वाइन करेंगे और उस डेटा को सिंगल स्ट्रिंग में बदल देंगे

आउटपुट >> "3456766"

मेरे उदाहरण में मुझे 209-356-6788 के रूप में आउटपुट की आवश्यकता है इसलिए मैंने प्रतिस्थापित किया

  $('#help_number').keyup(function(){
    $(this).val($(this).val().match(/\d+/g).join("").replace(/(\d{3})\-?(\d{3})\-?(\d{4})/,'$1-$2-$3'))
  });

0
changeStrangeDate(dateString: string) {
var sum = 0;
var numbers = dateString.match(/\d+/g);
if (numbers.length > 1) {
  numbers.forEach(element => {
    sum += parseInt(element);
  }
  );
}
console.log(new Date(sum).toDateString());
return new Date(sum).toUTCString();

}

आप इसे उस तरह से कर सकते हैं और फिर फ़ंक्शन को कॉल कर सकते हैं जहां आपको पैरामीटर के साथ ज़रूरत है।

this.changeStrangeDate('/Date(1551401820000-0100)/');

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.