2010-02-24 9 views
5

favor me ayude a resolver esta situación extraña:encontrar y obtener sólo el número de secuencia

Aquí está el código:

El enlace es así - www.blablabla.ru#3

La expresión regular es así:

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

La expresión regular es correcta: debe mostrar solo los números ... pero no muestra los números :-(

¿Puede darme consejos y proporcionar información sobre cómo obtener solo números en la cadena?

Gracias

Respuesta

1

Utilice la bandera /\D/g, reemplazar globalmente todas las instancias

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

Y /\D+/ obtiene un mejor rendimiento que /\D/g, de acuerdo con Justin Johnson, que creo que debido a \D+ puede coincidir y reemplazarlo de una sola vez.

+0

'/ \ D +/G 'es un 30% más rápido que'/\ D/G' Véase mi respuesta a la respuesta de Ivan –

+0

Gracias por el punto de referencia, creo que es debido a la \ D + puede coincidir en un solo tiro – YOU

+0

¡Usted gobierna, gracias! –

12

Está reemplazando solo el primer carácter que no sea un dígito con una cadena vacía. Intente utilizar:

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

(Observe la bandera "global" al final de la expresión regular).

+0

Tu mandas hombre, gracias! –

+2

Mis pruebas muestran que es aproximadamente un 30% más eficiente usar '/ \ D +/g' en lugar de'/\ D/g'. var r1 =/\ D/g, r2 =/\ D +/g, s = "", MAX = 1020, i = MAX; do {s + = (i% 2)? "aaaaaaaaaaa": "11111111111"; } mientras yo); console.time ("\\ D"); for (var i = 0; i

3

Editar: Ver Kobi's answer. Si realmente está usando la parte hash de las cosas, solo use location.hash! (Para uno mismo: ¡Doh!)

Pero dejaré el siguiente en caso de que esté haciendo algo más complejo de lo que sugiere su ejemplo.

Respuesta original:

Como los otros han dicho, que ha dejado el indicador global en su reemplazo. Pero estoy preocupado por la expresión, es realmente frágil. Considere: www.37signals.com#42: la cadena numérica resultante será 3742, que probablemente no es lo que desea. Otros ejemplos: www.blablabla.ru/user/4#3 (43), (23) www2.blablabla.ru#3, ...

¿Qué tal:

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

... que te lleva el conjunto contiguo de dígitos inmediatamente después de la almohadilla (o indefinido si no hay ninguno).

+2

There's location.hash. :) –

+2

@Georg: LOL !! Por supuesto que sí, y es la mejor respuesta (parece que Kobi la ha publicado ahora). Dejaré esto (editado) en caso de que no esté usando el hash, pero ese fue solo su ejemplo. –

6

Considere usar location.hash - esto contiene solo el hashtag al final de la url: "#42".
puede escribir:

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

Tú mandas hombre, gracias! –

Cuestiones relacionadas