Ich muss herausfinden, wie man den Index der ersten Ziffer in String erhalten. Ich habe eine Idee, wie man das mit einigen Loops macht, aber es wäre wirklich hässlich, also würde ich etwas Regex bevorzugen. Könnte mir jemand einen Hinweis geben, wie man das mit Regex macht?Wie bekomme ich Index der ersten Ziffer in String
Antwort
firstDigit = 'Testi2ng4'.match(/\d/) will give you the first digit in the string
indexed = 'Test2ing4'.indexOf(firstDigit)
Nun, ich ich meine Methoden genauer hinsehen müssen erraten finden, kann man einfach Testin323g'.search tun‘(/ \ d /);
Was ist mit Null? – epascarello
Und nach diesem Schnitt haben Sie gerade neu erfunden \ d – epascarello
yeah Ich erkannte irgendwie, dass er nie gesagt hat, dass er nicht 0 wollte. – VoronoiPotato
Verwenden string.search den Index mit der Regex \d
Suche: [schnellster Weg]
var str = "asdf1";
var search = str.search(/\d/)
console.log(search);
Spiel: [Langsamer als ein for-Schleife, zeigt nur eine andere Art und Weise tun]
var str = "asdf1";
var match = str.match(/(\D+)?\d/)
var index = match ? match[0].length-1 : -1;
console.log(index);
Ich finde es amüsant, dass Sie darauf hinweisen, dass meins am langsamsten ist, wenn Ihre erste Lösung 74% langsamer ist als eine Suche (meine ist 85% langsamer). Es ist wie zwei Männer, die darüber streiten, welche Schildkröte in einem Pferderennen schneller ist. – VoronoiPotato
http://jsperf.com/indexof-vs-searches – VoronoiPotato
Wenn Sie möchten, dass Antworten kritisch betrachtet werden, sollten Sie vielleicht Ihre eigenen überprüfen, Ihre erste Antwort gibt mir NaN auf Chrom.Ihre zweite Antwort liefert undefined, weil str.search eine Ganzzahl und kein Objekt zurückgibt. – VoronoiPotato
Eine for-Schleife am schnellsten als eine auf Regex basierende Lösung:
function indexOfNaN(input) {
let i = 0;
for (; input[i] >= '0' && input[i] <= '9'; i++);
return i;
}
Probieren Sie es online aus!
jsbench (je höher desto besser):
TestCase results for your browser Firefox version 54.0
Test name Benchmark results
indexOfNan 11,175,400 (±2.77)
regex search 3,787,617 (±5.22)
regex match 2,157,958 (±6.49)
regex match + indexOf 1,131,094 (±4.63)
Wenn Sie nur wurden für einen Einzeiler suchen, könnte man auch einen funktionalen Programmierung Ansatz versuchen und so etwas wie das folgende tun könnte:
let myStr = "ID12345";
let myStrIndex = myStr.indexOf(myStr.split('').filter(x => !isNaN(parseInt(x, 10)))[0]);
Die Zeichenfolge wird in ein Array von Zeichen aufgeteilt, und die Filterfunktion reduziert dieses Array auf die Anzahl der Zeichen. Das erste Zeichen des neuen Arrays ist das erste Zahlenzeichen in der Zeichenfolge. Daher gibt indexOf für dieses Zeichen den Index, nach dem Sie suchen.
Natürlich, wenn es kein Zahlenzeichen in der Zeichenfolge gibt, erhalten Sie als Ergebnis einen Index von -1. Und Sie könnten auch eine andere Überprüfung verwenden, wenn char Nummer Funktion ist als Parameter zu .filter() - Ich bin mir sicher, dass es etwas schneller ist, wenn das ein Anliegen ist
- 1. Abrufen der ersten Ziffer einer Nummer
- 2. Wie bekomme ich den Index der Unterschiede in String von Index zu Index?
- 3. Wie bekomme ich den letzten Index von "%" in einem String?
- 4. Nur Übereinstimmung des ersten Auftretens der Ziffer
- 5. Wie bekomme ich den richtigen Index des String-Zeichens?
- 6. VBA. Wie finde ich die Position der ersten Ziffer in der Zeichenfolge
- 7. Liste der ints nach der ersten Ziffer jedes int sortieren
- 8. Wie bekomme ich Index in Frozenset Python
- 9. Wie bekomme ich ComboboxItem-Index nach Tag?
- 10. variable Anzahl von Ziffer in Format-String
- 11. Ich bekomme "java.lang.StringIndexOutOfBoundsException: String-Index außerhalb des Bereichs: -3"
- 12. Index der Zeichenfolge und ersten Buchstaben Anruf
- 13. Wie bekomme ich den Index mit toMap() in rxjava
- 14. Wie bekomme ich den ersten Video Frame?
- 15. Wie bekomme ich die ersten X-Elemente?
- 16. VBA - Wie bekomme ich den Codenamen Index
- 17. Wie bekomme ich einen Listbox-Index?
- 18. Warum bekomme ich "undefinierten Index"?
- 19. Wie bekomme ich String durch Aufteilen der URL in Android?
- 20. Wie bekomme ich String-Namen von anderen String in C#
- 21. Wie bekomme ich die Positionen aller Matches in einem String?
- 22. Wie verschiebe ich bestimmte Knoten zum ersten Index?
- 23. Wie bekomme ich ein Attribut vom ersten einer has_many-Assoziation?
- 24. Return-String mit der ersten Übereinstimmung Regex
- 25. Wie bekomme ich den ersten und letzten Datensatz in PHP
- 26. Erhalte den Index des ersten gefundenen Speicherplatzes nach einem bestimmten Index in einem String
- 27. Wie erhalte ich den Index der ersten/letzten sichtbaren Gruppe in einer ExpandableListView?
- 28. Python - Liste der ersten Tupel Index erhalten?
- 29. Finding Index der Zeichenfolge in String-Array
- 30. Wie bekomme ich den Index des aktuellen ItemsControl Elements?
"habe eine Idee, wie man das mit einigen Schleifen, aber es würde Sei wirklich hässlich, also würde ich etwas Regex bevorzugen. Könnte mir jemand einen Hinweis geben, wie man das mit Regex macht? " Lustig, ich denke, "einige Schleifen" ist lesbarer als Regex .... – Anders
Ok, ich hätte eher effizient gesagt und kürzer als "hässlich" aber trotzdem nicht sagen, dass Schleifen mit mehreren if-Anweisungen besser als eins sind Zeile eines Regex-Ausdrucks ... – Husky
Das hängt sehr von der Regex ab, aber diese ist so einfach, dass jede andere Art nur albern erscheint. – VoronoiPotato