it-swarm.com.de

Regex verwendet Javascript, um nur Zahlen zurückzugeben

Wenn ich eine Zeichenfolge wie "etwas 12" oder "etwas 102" habe, wie würde ich eine Regex in Javascript verwenden, um nur die Zahlenteile zurückzugeben?

105
Malcolm

Reguläre Ausdrücke:

var numberPattern = /\d+/g;

'something102asdfkj1948948'.match( numberPattern )

Dies würde ein Objekt mit zwei Elementen zurückgeben, '102' und '1948948'. Bedienen Sie wie gewünscht. Wenn es mit keinem übereinstimmt, wird null zurückgegeben.

Vorausgesetzt, Sie haben nicht mit komplexen Dezimalzahlen zu tun, dürfte dies ausreichen.

170
meder omuraliev

Sie können auch alle nicht-stelligen Zeichen (\D oder [^0-9]) entfernen:

let Word_With_Numbers = 'abc123c def4567hij89'
let Word_Without_Numbers = Word_With_Numbers.replace(/\D/g, '');

console.log(Word_Without_Numbers)

169
CMS

Für Zahlen mit Dezimalbruch und Minuszeichen verwende ich diesen Ausschnitt:

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

Update: - 7/9/2018

Ein Werkzeug gefunden, mit dem Sie reguläre Ausdrücke visuell bearbeiten können: JavaScript Parser & Visualizer für reguläre Ausdrücke.

Update:

Hier ist eine andere, mit der Sie sogar reguläre Ausdrücke debuggen können: Online-Regex-Tester und -Debugger.

Update:

Eine andere: RegExr.

Update:

Regexper und Regex Pal.

19
Chen Dachao

Wenn Sie nur Ziffern wünschen:

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

Jetzt bekommen Sie die Ziffern zusammen

12
Iván Martínez

Ich denke, Sie möchten eine oder mehrere Nummern von der Zeichenfolge erhalten. In diesem Fall können Sie Folgendes verwenden:

// 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
7
Andrew Moore
var result = input.match(/\d+/g).join([])
2
PavelGora

Die Antworten stimmen nicht wirklich mit Ihrer Frage überein, was eine nachgestellte - Nummer impliziert. Denken Sie auch daran, dass Sie eine Schnur zurückbekommen. Wenn Sie tatsächlich need eine Zahl haben, wenden Sie das Ergebnis an:

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

Wenn Sie sich mit numerischen Element-IDs auf einer Webseite beschäftigen, könnte Ihr Code auch eine Element akzeptieren, indem Sie die Nummer aus ihrer id (oder ihrem ersten Elternteil mit einer id) extrahieren. Wenn Sie ein Event-Handy haben, können Sie wahrscheinlich auch das Element davon erhalten.

2
Pete Jordan

IMO die # 3-Antwort zu diesem Zeitpunkt von Chen Dachao ist der richtige Weg, wenn Sie eine beliebige Anzahl von Zahlen erfassen möchten. Der reguläre Ausdruck kann jedoch verkürzt werden aus:

/[-]{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 Beispiel eines linearen MDN-Verlaufs abgeschlachtet, damit der Regex vollständig getestet wird und hier kein Bildlauf erforderlich ist. Ich denke, ich habe alle Möglichkeiten in Bezug auf negative Zahlen, Dezimalzahlen, Einheitensuffixe wie deg und%, inkonsistente Komma- und Leerzeichenbenutzung sowie die zusätzlichen Punkt-/Punkt- und Bindestrich-/Bindestrich-Zeichen im Text "lin-grad.ient" berücksichtigt ". Bitte lassen Sie mich wissen, wenn mir etwas fehlt. Das Einzige, was ich sehen kann, ist, dass es eine schlecht gebildete Dezimalzahl wie "0..8" gibt.

Wenn Sie wirklich ein Array von Zahlen wünschen, können Sie das gesamte Array in dieselbe 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 Punkt-/Punkt-Zeichens kümmern, daher kann der reguläre Ausdruck noch einfacher sein:

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