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