191 Stimmen

Regex mit Javascript, um nur Zahlen zurückzugeben

Wenn ich eine Zeichenfolge wie "etwas12" oder "etwas102" habe, wie würde ich eine Regex in Javascript verwenden, um nur die Zahl Teile zurück?

7voto

jamess Punkte 513

IMO ist die #3 Antwort zu diesem Zeitpunkt von Chen Dachao ist der richtige Weg, wenn Sie jede Art von Zahl erfassen wollen, aber der reguläre Ausdruck kann von gekürzt werden:

/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g

zu:

/-?\d*\.?\d+/g

Zum Beispiel dieser Code:

"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)

erzeugt dieses Array:

["217","255","0","0","-0.8","-255","0","0","0","70.71"]

Ich habe ein MDN-Beispiel für einen linearen Farbverlauf so umgeschrieben, dass es den Regexp vollständig testet und nicht hierher gescrollt werden muss. Ich denke, ich habe alle Möglichkeiten in Bezug auf negative Zahlen, Dezimalzahlen, Einheitssuffixe wie deg und %, inkonsistente Verwendung von Kommas und Leerzeichen und die zusätzlichen Punkt-/Punkt- und Bindestrichzeichen im Text "lin-grad.ient" berücksichtigt. Bitte lassen Sie mich wissen, ob ich etwas übersehe. Das einzige, was ich sehe, was nicht funktioniert, ist eine schlecht geformte Dezimalzahl wie "0..8".

Wenn Sie wirklich ein Array von Zahlen benötigen, können Sie das gesamte Array in der gleichen Codezeile konvertieren:

array = whatever.match(/-?\d*\.?\d+/g).map(Number);

Mein spezieller Code, der CSS-Funktionen analysiert, muss sich nicht um die nicht-numerische Verwendung des Punktes/Periode-Zeichens kümmern, so dass der reguläre Ausdruck noch einfacher sein kann:

/-?[\d\.]+/g

4voto

PVD Punkte 121
var result = input.match(/\d+/g).join([])

4voto

SridharKritha Punkte 6415

Split und Regex verwenden :

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

2voto

Pete Jordan Punkte 548

Die gegebenen Antworten entsprechen eigentlich nicht Ihrer Frage, die eine nachlaufend Nummer. Denken Sie auch daran, dass Sie eine Zeichenkette zurückbekommen; wenn Sie tatsächlich brauchen eine Zahl, geben Sie das Ergebnis ein:

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

Wenn Sie mit numerischen Element-IDs auf einer Webseite arbeiten, könnte Ihr Code auch eine Element und extrahiert die Nummer aus dem id (oder sein erstes übergeordnetes Element mit einer id ); wenn Sie eine Event praktisch, können Sie wahrscheinlich die Element auch hiervon.

0 Stimmen

Dies ist zwar eine raffinierte Antwort, aber ich glaube nicht, dass die anderen Antworten "nicht wirklich zu [der] Frage passen". In der Tat sind die anderen Antworten vielseitiger. Sie funktionieren sowohl mit Zahlen am Ende als auch mit Zahlen in der Mitte. Es ist etwas anmaßend anzunehmen, dass der Auftraggeber wollte, dass es NUR mit nachgestellten Zahlen funktioniert.

1voto

Marcelo Viana Punkte 304

Wie in der Antwort von @Syntle beschrieben, erhalten Sie bei nicht numerischen Zeichen eine Uncaught TypeError: Cannot read property 'join' of null .

Dadurch werden Fehler vermieden, wenn keine Treffer gefunden werden, und es wird eine leere Zeichenkette zurückgegeben:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X