Ho bisogno di scoprire come ottenere l'indice della prima cifra in String. Ho un'idea di come farlo usando alcuni loop ma sarebbe davvero brutto quindi preferirei regex. Qualcuno potrebbe darmi un indizio su come farlo usando regex?Come ottenere l'indice della prima cifra in Stringa
risposta
firstDigit = 'Testi2ng4'.match(/\d/) will give you the first digit in the string
indexed = 'Test2ing4'.indexOf(firstDigit)
Beh io che ho bisogno di guardare i miei metodi più da vicino, si può solo fare 'Testin323g'.search (/ \ d /);
che dire di zero? – epascarello
E dopo quella modifica, hai appena reinventato \ d – epascarello
sì mi sono reso conto che non ha mai detto che non voleva 0. – VoronoiPotato
Usa string.search per trovare l'indice con la regex \d
Cerca: [modo più veloce]
var str = "asdf1";
var search = str.search(/\d/)
console.log(search);
Partita: [Più lento di un ciclo for, solo mostrando un altro modo di farlo]
var str = "asdf1";
var match = str.match(/(\D+)?\d/)
var index = match ? match[0].length-1 : -1;
console.log(index);
Trovo divertente il fatto che tu stia sottolineando che il mio è il più lento quando la tua prima soluzione è il 74% più lenta di una ricerca (il mio è più lento dell'85%). Sono come due uomini che discutono su quale tartaruga è più veloce in una corsa di cavalli. – VoronoiPotato
http://jsperf.com/indexof-vs-searches – VoronoiPotato
Se vuoi che le risposte vengano esaminate in modo critico, forse dovresti rivedere le tue, la tua prima risposta mi dà NaN su Chrome.La tua seconda risposta si rivela indefinita, perché str.search restituisce un intero non un oggetto. – VoronoiPotato
Un ciclo for è il più veloce di una soluzione basata su regex:
function indexOfNaN(input) {
let i = 0;
for (; input[i] >= '0' && input[i] <= '9'; i++);
return i;
}
Provalo online!
jsbench (maggiore è meglio):
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)
Se tu fossi solo alla ricerca di un uno di linea si potrebbe anche provare un approccio di programmazione funzionale e potrebbe fare qualcosa di simile al seguente:
let myStr = "ID12345";
let myStrIndex = myStr.indexOf(myStr.split('').filter(x => !isNaN(parseInt(x, 10)))[0]);
La stringa è divisa in una matrice di caratteri e la funzione filtro riduce quella matrice solo ai caratteri numerici. Il primo carattere del nuovo array è il primo numero di carattere nella stringa, quindi usando indexOf su quel personaggio si ottiene l'indice che si sta cercando.
Ovviamente se nella stringa non è presente alcun carattere numerico, come risultato si ottiene un indice di -1. E potresti anche usare un controllo diverso se char è il numero funzione come parametro di .filter() - Sono sicuro che c'è qualcosa di più veloce se è una preoccupazione
- 1. VBA. Come trovare la posizione della prima cifra nella stringa
- 2. Recupero della prima cifra di un numero
- 3. R: come trovare la prima cifra in una stringa
- 4. Come ottenere la prima cifra non nulla di un BigDecimal
- 5. Come ottenere Ultima cifra del numero
- 6. Get prima parola della stringa
- 7. Ottenere la prima riga della stringa di risorse mysql?
- 8. C++ ottenere ogni cifra int
- 9. Come ottenere l'ultima cifra di un numero
- 10. Come dividere la stringa prima della prima virgola?
- 11. DateTime formato stringa ultima cifra dell'anno
- 12. Come ottenere TextWidth della stringa (senza Canvas)?
- 13. TWIG come ottenere la prima parola di una stringa?
- 14. Come convalidare la stringa numerica come cifra con ibernazione?
- 15. Come ottenere la lunghezza della stringa
- 16. Come ottenere il nome della funzione come stringa in Python?
- 17. Swift: come ottenere la stringa prima di un determinato carattere?
- 18. Come ottenere la lunghezza della stringa in byte in nodejs?
- 19. Ottenere la lunghezza della stringa in EL
- 20. Ottenere la posizione della lettera prima capitale in una stringa utilizzando php
- 21. Aggiungi cifra a un int senza convertire in stringa?
- 22. Ottenere prima riga di una stringa in PHP
- 23. come cambiare il caso della prima lettera di una stringa?
- 24. Come ottenere la dimensione della stringa in byte?
- 25. Come ottenere la dimensione in byte della stringa multibyte
- 26. Rimozione della prima visualizzazione della parola da una stringa?
- 27. Come ottenere la prima riga da String in Ruby?
- 28. Come sostituire una stringa in una stringa ad eccezione della prima occorrenza
- 29. Come ottenere la prima chiave (non valore) della mappa immutable.js?
- 30. Ottieni la prima stringa prima del separatore?
"hai un'idea di come farlo usando alcuni cicli ma sarebbe essere davvero brutto quindi preferirei un'espressione regolare Qualcuno potrebbe darmi un indizio su come farlo usando regex ?? " Divertente, penso che "alcuni loop" sia più leggibile quindi regex .... – Anders
Ok, dovrei dire piuttosto efficiente e più breve di "brutto" ma comunque non dirmi che i loop con più se le dichiarazioni sono meglio di una linea di un'espressione regolare ... – Husky
Questo dipende molto dalla regex, tuttavia questo è così semplice in qualsiasi altro modo solo sembra sciocco. – VoronoiPotato