Antworten:
Reguläre Ausdrücke:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
Dies würde ein Array mit zwei Elementen zurückgeben, '102' und '1948948'. Arbeiten Sie wie Sie möchten. Wenn es mit keinem übereinstimmt, wird null zurückgegeben.
Um sie zu verketten:
'something102asdfkj1948948'.match( numberPattern ).join('')
Angenommen, Sie haben es nicht mit komplexen Dezimalstellen zu tun, sollte dies wohl ausreichen.
d
, so.match(/\d+/g)
parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
Sie können auch alle nichtstelligen 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)
Für Zahlen mit Dezimalbruch und Minuszeichen verwende ich dieses Snippet:
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: - 09.07.2008
Es wurde ein Tool gefunden, mit dem Sie reguläre Ausdrücke visuell bearbeiten können: JavaScript Parser & Visualizer für reguläre Ausdrücke .
Aktualisieren:
Hier ist eine andere, mit der Sie sogar Regexp debuggen können: Online-Regex-Tester und Debugger .
Aktualisieren:
Ein anderer: RegExr .
Aktualisieren:
Wenn Sie nur Ziffern möchten:
var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714
Jetzt werden die Ziffern zusammengefügt
Ich denke, Sie möchten Nummer (n) aus 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
get_numbers/1
ein Array von Zeichenfolgen zurückgegeben, nicht Zahlen. Für Ihr Beispiel würde es zurückgeben: * ["102"]
* ["102", "12"]
* null
Die Antworten stimmen nicht mit Ihrer Frage überein, was eine nachfolgende Zahl impliziert . Denken Sie auch daran, dass Sie eine Zeichenfolge zurückerhalten. Wenn Sie tatsächlich eine Nummer benötigen , 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, kann Ihr Code auch eine akzeptieren Element
und die Nummer aus der id
(oder dem ersten übergeordneten Element mit einer id
) extrahieren . Wenn Sie ein Event
Handy haben, können Sie wahrscheinlich auch das bekommen Element
.
IMO, die Nummer 3 der Antworten von Chen Dachao, ist der richtige Weg, wenn Sie eine beliebige Zahl 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)
generiert dieses Array:
["217","255","0","0","-0.8","-255","0","0","0","70.71"]
Ich habe ein Beispiel für einen linearen MDN-Verlauf geschlachtet, damit der reguläre Ausdruck vollständig getestet wird und hier nicht gescrollt werden muss. Ich denke, ich habe alle Möglichkeiten in Bezug auf negative Zahlen, Dezimalstellen, Einheitensuffixe wie deg und%, inkonsistente Komma- und Leerzeichenverwendung sowie die zusätzlichen Zeichen für Punkt / Punkt und Bindestrich / Bindestrich in den Text "lin-grad.ient" aufgenommen ". Bitte lassen Sie mich wissen, wenn mir etwas fehlt. Das einzige, was ich sehen kann, dass es nicht funktioniert, ist eine schlecht geformte Dezimalzahl wie "0..8".
Wenn Sie wirklich ein Array von Zahlen möchten, 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- / Punktzeichens kümmern, sodass der reguläre Ausdruck noch einfacher sein kann:
/-?[\d\.]+/g
Verwenden von Split und Regex:
var str = "fooBar0123".split(/(\d+)/);
console.log(str[0]); // fooBar
console.log(str[1]); // 0123
Laut der Antwort von @ Syntle erhalten Sie eine, wenn Sie nur nicht numerische Zeichen haben Uncaught TypeError: Cannot read property 'join' of null
.
Dies verhindert Fehler, wenn keine Übereinstimmungen gefunden werden, und gibt eine leere Zeichenfolge zurück:
('something'.match( /\d+/g )||[]).join('')
Wenn Sie auch durch Punkte / Kommas getrennte Zahlen möchten, dann:
\d*\.?\d*
oder
[0-9]*\.?[0-9]*
Sie können https://regex101.com/ verwenden , um Ihre regulären Ausdrücke zu testen.