Regulärer Ausdruck zum Formatieren von Zahlen in JavaScript
Brauche ich anzeigen, um eine formatierte Zahl auf einer web-Seite mit JavaScript. Ich möchte es formatieren, so dass es die Kommas an den richtigen stellen. Wie würde ich das mit einem regulären Ausdruck? Habe ich bekommen, soweit so etwas wie dieses:
myString = myString.replace(/^(\d{3})*$/g, "${1},");
...und dann erkannte dies wäre komplexer als ich denke (und die regex oben ist nicht einmal in der Nähe, was ich brauche). Ich habe getan, einige suchen, und ich habe eine harte Zeit der Suche nach etwas, das funktioniert für diese.
Grundsätzlich möchte ich diese Ergebnisse:
- 45 wird 45
- 3856 wird 3,856
- 398868483992 wird 398,868,483,992
...Sie bekommen die Idee.
Kommentar zu dem Problem
Die meisten Menschen haben gezeigt Ansätze erfordern iteration, aber es gibt Feste Formen, die als gut.
Wenn dies ist ein XY-problem finden Sie unter so drucken Sie eine Zahl mit Kommata als Tausendertrennzeichen in JavaScript
InformationsquelleAutor der Frage Brandon Montgomery | 2010-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese kann getan werden, in einem einzigen regex, keine iteration erforderlich. Wenn Ihr browser unterstützt ECMAScript-2018, Sie könnten einfach verwenden lookaround und legen Sie einfach Kommas an den richtigen stellen:
Suche nach
(?<=\d)(?=(\d\d\d)+(?!\d))
und ersetzen Sie alle mit,
In älteren Versionen, die JavaScript nicht unterstützt, lookbehind, so dass nicht funktioniert. Glücklicherweise müssen wir nur ein wenig ändern bit:
Suche nach
(\d)(?=(\d\d\d)+(?!\d))
und ersetzen Sie alle mit\1,
So, in JavaScript, das würde wie folgt Aussehen:
Erklärung: nimmt an, dass von der aktuellen position in der Zeichenfolge ab, es ist möglich, entsprechen die Ziffern in vielfachen von drei, und es ist eine Ziffer Links der aktuellen position.
Dies funktioniert auch mit Dezimalzahlen (123456.78), solange es nicht zu viele Ziffern "auf der rechten Seite der Punkt" (sonst bekommen Sie 123,456.789,012).
Können Sie auch definieren, es in eine Reihe Prototypen, wie folgt:
Und dann verwenden Sie es wie folgt:
Credit: Jeffrey Friedl, Mastering Regular Expressions, 3. Platz. edition, p. 66-67
InformationsquelleAutor der Antwort Tim Pietzcker
Formatierung einer Zahl behandelt werden können aus mit nur einer Zeile code.
Dieser code erweitert das Number-Objekt; Beispiele sind unten aufgeführt.
Code:
, Wie es funktioniert
Den regulären Ausdruck, der benutzt eine look-ahead zu finden Positionen innerhalb des Strings, wo die einzige Sache auf der rechten Seite ist eine oder mehrere Gruppierungen von drei zahlen, bis entweder ein Punkt oder das Ende der Zeichenkette erkannt wird. Die
.split()
wird verwendet, um brechen die Zeichenfolge an, diese Punkte in ein array-Elemente, und dann die.join()
verschmilzt diese Elemente zurück in einen string, getrennt durch Kommas.Konzept zu finden, Positionen innerhalb der Zeichenfolge, anstatt übereinstimmenden tatsächlichen Zeichen, ist wichtig, um die split die Zeichenfolge ohne entfernen von Zeichen.
Beispiele:
Natürlich kann der code leicht erweitert oder verändert zu behandeln locale überlegungen. Zum Beispiel, hier ist eine neue version des Codes, die automatisch erkennt das Gebietsschema-Einstellungen und swaps, die Verwendung von Kommata und Punkte.
Locale-aware version:
Es sei denn, es ist wirklich notwendig, ich bevorzuge die Einfachheit der ersten version, obwohl.
InformationsquelleAutor der Antwort Speednet
//Sie wünschen konnte, um Nachkommastellen zu berücksichtigen
var n= 10000000000.34;
n.Kommas() = zurückgegebene Wert: (String) 10,000,000,000.34
InformationsquelleAutor der Antwort kennebec
Wenn Sie wirklich wollen, eine regex, die Sie verwenden können, zwei in einer while-Schleife:
Und wenn Sie wollen, können Sie formatieren Sie zahlen mit Nachkommastellen zu:
Edit:
Können Sie auch dies mit 2 reguläre Ausdrücke und keine Schleife, splits, joins, etc:
Den ersten regex setzt ein Komma nach der ersten 1 oder 2 Ziffern, wenn die Verbleibende Anzahl der Ziffern ist teilbar durch drei. Die zweite regex Orten ein Komma nach jedem verbleibenden Gruppe von 3 Ziffern.
Diese funktionieren nicht mit Dezimalzahlen, sondern Sie eignen sich für positive und negative Ganzzahlen.
Test Ausgabe:
InformationsquelleAutor der Antwort Jeff B
Jemand erwähnt, dass lookbehind ist nicht möglich, in Javascript RegExp. Hier ist eine tolle Seite, die erläutert, wie lookaround (lookahead und lookbehind).
http://www.regular-expressions.info/lookaround.html
InformationsquelleAutor der Antwort Robusto
Unterstrich.string hat eine schöne Umsetzung.
Habe ich geändert, es leicht zu akzeptieren, numerische Zeichenfolgen.
InformationsquelleAutor der Antwort mpen
Probieren Sie etwas wie dieses:
InformationsquelleAutor der Antwort Seth
Ich denke, Sie würden unbedingt mehrere Durchläufe zu erreichen, das mit regulären Ausdrücken. Versuchen Sie Folgendes:
InformationsquelleAutor der Antwort Ryan Brunner
Iteration ist nicht erforderlich,
Ergebnisse
InformationsquelleAutor der Antwort Justin Johnson
Ersten Rückwärtsgang ein Zeichen-array, dann fügen Sie Kommas nach jeder Dritten Zahl, es sei denn, es ist kurz vor dem Ende der Zeichenfolge oder vor einem - Zeichen. Dann umkehren die Zeichen-array wieder und machen es zu einem string wieder.
InformationsquelleAutor der Antwort Harmen
Brandon,
Ich wollte nicht sehen, zu viele Antworten arbeiten die regex aus dem Dezimaltrennzeichen zurück, so dass ich dachte, ich würde in Glockenspiel.
Fragte ich mich, ob es irgendeine elegante profitieren zu neu-schreiben der regexp-scan von der Rückseite nach vorne...
>> Fiddle Demo <<
Diese Konten für jede Dezimalstelle.
InformationsquelleAutor der Antwort Levi Beckman