2010-02-24 16 views
5

Si prega di aiutarmi a risolvere questa strana situazione:trovare e ottenere solo il numero nella stringa

Ecco il codice:

Il collegamento è così - www.blablabla.ru#3

L'espressione regolare è così:

var id = window.location.href.replace(/\D/, ''); 
alert(id); 

L'espressione regolare è corretta - deve mostrare solo i numeri ... ma non mostra i numeri :-(

Potete per favore consigliarmi e fornire alcune informazioni su come ottenere solo numeri nella stringa?

Grazie

risposta

1

Utilizzare la bandiera /\D/g, sostituire globalmente tutte le istanze

var id = window.location.href.replace(/\D/g, ''); 
alert(id); 

E /\D+/ ottiene prestazioni migliori rispetto /\D/g, secondo Justin Johnson, che a mio avviso a causa del \D+ può abbinare e sostituirlo in un colpo solo.

+0

'/ \ D +/G' è di circa il 30% più veloce di'/\ D/G' Vedere la mia risposta alla risposta di Ivan –

+0

Grazie per il punto di riferimento, penso che la sua causa di \ D + può abbinare in un solo colpo – YOU

+0

Regola, grazie !! –

12

Si sta sostituendo solo il primo carattere non numerico con stringa vuota. Prova a utilizzare:

var id = window.location.href.replace(/\D+/g, ''); alert(id); 

(notare il flag "globale" alla fine della regex).

+0

Tu controlli l'uomo, grazie! –

+2

I miei test mostrano che è più efficiente del 30% usare '/ \ D +/g' invece di solo'/\ D/g'. var r1 =/\ D/g, r2 =/\ D +/g, s = "", MAX = 1020, i = MAX; do {s + = (i% 2)? "aaaaaaaaaaa": "11111111111"; } mentre io); console.time ("\\ D"); per (var i = 0; i

3

Modifica: Vedere Kobi's answer. Se stai usando la parte hash delle cose, usa solo location.hash! (A se stessi: Doh!)

Ma lascerò il sotto in caso stiate facendo qualcosa di più complesso di quanto suggerisca il vostro esempio.

risposta originale:

Mentre gli altri hanno detto, hai lasciato fuori la bandiera globale nel vostro rimontaggio. Ma sono preoccupato per l'espressione, è molto fragile. Considerare: www.37signals.com#42: la stringa numerica risultante sarà 3742, che probabilmente non è ciò che si desidera. Altri esempi: www.blablabla.ru/user/4#3 (43), www2.blablabla.ru#3 (23), ...

Come 'bout:

id = window.location.href.match(/\#(\d+)/)[1]; 

... il quale si ottiene l'insieme contiguo di cifre immediatamente dopo il carattere cancelletto (o non definito se non ce ne sono).

+2

C'è location.hash. :) –

+2

@Georg: LOL !! Certo che c'è, ed è la risposta migliore (sembra che Kobi lo abbia pubblicato ora). Lascerò questo (modificato) nel caso in cui in realtà non stia usando l'hash ma quello era solo il suo esempio. –

6

Considerare l'utilizzo di location.hash - questo contiene solo l'hashtag alla fine dell'URL: "#42".
È possibile scrivere:

var id = location.hash.substring(1); 
+0

Tu controlli l'uomo, grazie! –

Problemi correlati