Extrahieren Sie eine Zahl aus einer Zeichenfolge ("get")


355

Ich habe eine Zeichenfolge in Javascript wie "# box2" und ich möchte nur die "2" daraus.

Versucht:

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

In der Warnung wird immer noch # box2 zurückgegeben. Wie kann ich es zum Laufen bringen?

Es muss für jede am Ende angebrachte Längennummer geeignet sein.


1
Sie können einfach so machen. es wird gut funktionieren. var thestring = $ (this) .attr ('href'); var thenum = parsefloat (thestring); Alarm (thenum);
Vivek Shukla

1
Dieser Code funktioniert gut für mich, aber für einen Fall habe ich eine Zeichenfolge '2.5 / Meile' und ich möchte 2.5 daraus extrahieren. Der obige Code gibt mir 25 statt 2,5
Bijay Singh

Antworten:


578

Für dieses spezielle Beispiel

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

im allgemeinen Fall:

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

Da diese Antwort aus irgendeinem Grund an Popularität gewonnen hat, gibt es hier einen Bonus: den Regex-Generator.

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, '')hätte zeigen sollen 2, nicht 2_col3.
Shiplu Mokaddim

2
@ shiplu.mokadd.im: Ich sehe keinen Hinweis #box2_col3in der Frage.
Georg

1
Ja, es gibt keine Referenz von #box2_col3. Beachten Sie jedoch das verwendete Regex-OP ( \w)(.+$)), das deutlich anzeigt, dass nach der Nummer noch andere Zeichen stehen.
Shiplu Mokaddim

3
In diesem Fall schlägt Ihr Muster auch fehl, wenn vor dem Ende eine Nummer steht.
Shiplu Mokaddim

2
Sie könnten replacemit führenden Zahlen arbeiten, indem Sie: verwenden theString.replace(/^.*\D+/g, '');, aber die Lösung von shiplu.mokadd.im ist besser.
LandonSchropp

225

Sie sollten Folgendes versuchen:

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

Ergebnis

1234561613213213

1
nette Antwort, aber was ist, wenn ich die Zahlen separat möchte. dh 1234, 5616133 ...
Amar Singh

Oder parseInt(txt.match(/\d/g).join(''), 10)
Einzeiler

" $ 20.0 ".match(/\d/g).join('') => "200" (nur sagen)
vsync

91

Ich denke, dieser reguläre Ausdruck wird Ihrem Zweck dienen:

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

Wo txtist deine Schnur?

Es reißt im Grunde alles ab, was keine Ziffer ist.

Ich denke, Sie können das Gleiche auch damit erreichen:

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

1
/[^0-9]/g+1 zur besseren Lesbarkeit. Wird auch mit den meisten Antworten hier verwendet: stackoverflow.com/q/1862130/1066234
Kai Noack

58

Versuchen Sie Folgendes: string.replace(/[^0-9]/g, '');Dadurch werden alle nichtstelligen Zeichen gelöscht, wobei nur Ziffern in der Zeichenfolge verbleiben

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
Dies ist besser als die akzeptierte Antwort, da sie alle Nicht-Zahlen global ersetzt und übrigens /[^0-9]/gdurch ersetzt werden kann /[^\d]/g.
CPHPython

52

Match-Funktion verwenden.

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

jsfiddle


1
Sie können auch ein unäres '+' hinzufügen, um es zu einer Ganzzahl zu machen. Var thenum = + thestring.match (/ \ d + $ /) [0];
Sergey Onishchenko

Ich denke, das funktioniert nicht für> 1-stellige Zahlen? (Ich verstehe, die Frage war für 1-stellige Zahlen, aber ich suche nach möglichen Zahlen> 10.)
Felix

@nissemand Nicht raten . Versuchen Sie es selbst. Sogar du hast die Geige nicht gesehen.
Shiplu Mokaddim

Ich liebe das. Eine einfachste Möglichkeit, die Zahl in eine Variable zu extrahieren, ohne das Element zu berühren oder zu ändern. Ich würde eine Kombination mit jedem für ein paar Zufälle innerhalb einer Zeichenfolge schätzen. dh die Zeichenfolge 12a55 gibt die letzte Nummer an, nicht alle.
m3nda

1
@ YevgeniyAfanasyev sollte es nicht. Überprüfen Sie die ursprüngliche Frage. Speziell die letzte Zeile. Nummer sollte am Ende sein.
Shiplu Mokaddim

33

Versuchte alle oben genannten Kombinationen mit diesem Code und brachte es zum Laufen, war die einzige, die an dieser Zeichenfolge funktionierte ->(12) 3456-7890

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

Ergebnis: "1234567890"

Obs: Ich weiß, dass eine solche Zeichenfolge nicht auf dem attr steht, aber was auch immer, die Lösung ist besser, weil sie vollständiger ist.


Ich denke, besser wird es sein, str.match(/\d+/g).map(Number)es wird ein Array zurückgeben
Artem Bernatskyi

33

Und dies ist ein Ausschnitt, der Preise mit Währung und Formatierung extrahiert:

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

13

Sie können eine großartige parseInt-Methode verwenden

Die führenden Ziffern werden in eine Zahl umgewandelt

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

18
Dies funktioniert nur, wenn die Nummer am Anfang der Zeichenfolge steht
Russj

2
seine Rückkehr NaN
Ahmed Syed


4

Sie können reguläre Ausdrücke verwenden.

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

Das wird 2 alarmieren.


4
-1 Mehrfachziffern werden nicht erfasst und für die Verwendung des Arrays in Alarmbereitschaft
Shiplu Mokaddim

4

Wie Sie mit regulären Ausdrücken Zahlen aus einem String abrufen, zum Beispiel:

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

das Ergebnis von myStringist " 24"

Ein Beispiel für diesen laufenden Code finden Sie hier: http://ideone.com/iOCf5G


5
java! == javascript - replaceAll ist in Standard-Javascript nicht vorhanden. Nur einige Bibliotheken wie jQuery haben diese Methode. In Zukunft sollten Sie klären.
Levi Roberts

3

Sie können die Unterstrich-Zeichenfolgenbibliothek wie folgt verwenden

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

_(href).strRight(common)

Ergebnis ist: 1

Siehe: https://github.com/epeli/underscore.string

DEMO:
http://jsfiddle.net/abdennour/Vyqtt/
HTML-Code:

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

JS-Code:

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

Wenn Sie das folgende Suffix haben:

href="box1az" 

Sie können die nächste Demo verwenden:

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

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

}

3

Hier ist eine Lösung. das prüft auf keine Daten

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

Verwenden Sie diesen einzeiligen Code, um die erste Zahl in einer Zeichenfolge zu erhalten, ohne Fehler zu erhalten:

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

2

Bitte überprüfen Sie unten JavaScripts, dort können Sie nur Nummer bekommen

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

Ausgabe : 1234567789


2

Sie können Zahlen mit einem Regex-Ausdruck aus einer Zeichenfolge extrahieren:

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

Ausgabe: 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

Fügen Sie eine Erklärung hinzu. ZB warum Sie nämlich diesen regulären Ausdruck verwenden.
Mentallurg

1

Diese Antwort wird den größten Teil des Szenarios abdecken. Ich kann diese Situation überwinden, wenn der Benutzer versucht, die Telefonnummer zu kopieren und einzufügen

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

Erläuterung:

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

str.match(/\d+/g)

Es wird ein Array von Zeichenfolgen als Ausgabe gegeben >> ["34", "56766"]

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

join konvertiert und verkettet diese Array-Daten in eine einzelne Zeichenfolge

Ausgabe >> "3456766"

In meinem Beispiel benötige ich die Ausgabe als 209-356-6788, also habe ich Ersetzen verwendet

  $('#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();

}}

Sie können es so machen und dann die Funktion mit Parametern aufrufen, wo Sie sie brauchen.

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

0

Sie können eine solche Funktion ausführen

function justNumbers(string) 
    {
        var numsStr = string.replace(/[^0-9]/g,'');
        return parseInt(numsStr);
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.