2010-02-24 12 views
5

S'il vous plaît me aider à résoudre cette situation étrange:Rechercher et obtenir le numéro que dans la chaîne

Voici le code:

Le lien est donc - www.blablabla.ru#3

Le regex est donc:

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

L'expression régulière est correcte - elle doit montrer seulement des nombres ... mais elle ne montre pas les nombres :-(

Pouvez-vous s'il vous plaît me conseiller et fournir des informations sur la façon d'obtenir seulement des chiffres dans la chaîne?

Merci

Répondre

1

Utilisez le drapeau /\D/g, remplacer globalement toutes les instances

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

Et /\D+/ obtient de meilleures performances que /\D/g, selon Justin Johnson, que je pense à cause de \D+ peut correspondre et remplacer en un coup.

+0

'/ \ D +/g' est environ 30% plus rapide que'/\ D/g' Voir ma réponse à la réponse d'Ivan –

+0

Merci pour l'indice de référence, je pense que sa raison de \ D + peut correspondre en un coup – YOU

+0

Vous régnez, merci !! –

12

Vous remplacez uniquement le premier caractère non numérique avec une chaîne vide. Essayez d'utiliser:

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

(Notez le drapeau "global" à la fin de regex).

+0

Vous dirigez l'homme, merci! –

+2

Mes tests montrent qu'il est environ 30% plus efficace d'utiliser '/ \ D +/g' au lieu de seulement/D/g. var r1 =/\ D/g, r2 =/\ D +/g, s = "", MAX = 1020, i = MAX; do {s + = (i% 2)? "aaaaaaaaaaa": "11111111111"; } alors que je); console.time ("\\ D"); pour (var i = 0; i

3

Modifier: Voir Kobi's answer. Si vous utilisez vraiment la partie hash des choses, utilisez simplement location.hash! (À moi-même: Doh!)

Mais je vais laisser le ci-dessous au cas où vous faites quelque chose de plus complexe que votre exemple ne le suggère.

réponse originale:

Comme les autres ont dit, vous avez quitté le drapeau global dans votre remplacement. Mais je m'inquiète pour l'expression, c'est vraiment fragile. Considérez: www.37signals.com#42: Votre chaîne numérique résultante sera 3742, ce qui n'est probablement pas ce que vous voulez. Autres exemples: www.blablabla.ru/user/4#3 (43), www2.blablabla.ru#3 (23), ...

Comment « bout:

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

... qui vous obtient l'ensemble contigu de chiffres qui suit immédiatement la marque de hachage (ou non définie s'il n'y en a pas).

+2

Il y a location.hash. :) –

+2

@Georg: LOL !! Bien sûr, il y a, et c'est la meilleure réponse (on dirait que Kobi l'a posté maintenant). Je vais laisser ceci (édité) au cas où il n'utiliserait pas le hash mais ce n'était que son exemple. –

6

Envisagez d'utiliser location.hash - cela ne contient que le hashtag à la fin de l'URL: "#42".
Vous pouvez écrire:

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

Vous dirigez l'homme, merci! –

Questions connexes