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.

user1022585
quelle
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
1
Siehe auch
Kai Noack

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>

georg
quelle
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
Jason Marshall
quelle
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,'');
Theodoros Klikas
quelle
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, ''));

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

Shiplu Mokaddim
quelle
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.

Paulo Roberto Rosa
quelle
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
Lacho Tomov
quelle
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
Eugene Tiurin
quelle
18
Dies funktioniert nur, wenn die Nummer am Anfang der Zeichenfolge steht
Russj
2
seine Rückkehr NaN
Ahmed Syed
7

Für eine Zeichenfolge wie #box2sollte dies funktionieren:

var thenum = thestring.replace(/^.*?(\d+).*/,'$1');

jsFiddle:

icyrock.com
quelle
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.

Robby Shaw
quelle
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

Jorgesys
quelle
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);

}
Abdennour TOUMI
quelle
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');
}
Gene Bo
quelle
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);
Ruslan
quelle
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

Thilina Sampath
quelle
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

Cassio Seffrin
quelle
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
Manoj Chavanke
quelle
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'))
  });
Vinay Kumar
quelle
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)/');
Irakli Kardava
quelle
0

Sie können eine solche Funktion ausführen

function justNumbers(string) 
    {
        var numsStr = string.replace(/[^0-9]/g,'');
        return parseInt(numsStr);
    }
Danielle Cohen
quelle