2010-02-24 12 views
5

Bitte helfen, diese seltsame Situation zu lösen:Finden und mir nur Nummer in String

Hier Code:

Der Link so ist - www.blablabla.ru#3

Die Regex ist so:

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

Der reguläre Ausdruck ist korrekt - er muss nur Zahlen anzeigen ... aber er zeigt keine Zahlen :-(

Können Sie mir bitte Ratschläge geben und Informationen darüber geben, wie Sie nur Zahlen in der Zeichenfolge erhalten?

Dank

Antwort

1

Verwenden Sie die Flagge /\D/g, global ersetzen alle Instanzen

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

Und /\D+/ bekommt eine bessere Leistung als /\D/g, nach Justin Johnson, die ich wegen \D+ denken kann, es passen und ersetzen In einem Schuss.

+0

'/ \ d +/g' ist ca. 30% schneller als'/\ D/g' meine Antwort auf Ivan Antwort Siehe –

+0

Danke für die Benchmark, ich glaube, seine wegen \ D + kann in einem Schuss passen – YOU

+0

Sie herrschen, danke !! –

12

Sie ersetzen nur das erste zeichenlose Zeichen durch eine leere Zeichenfolge. Versuchen Sie mit:

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

(Beachten Sie die "globale" Flagge am Ende der Regex).

+0

Sie herrschen, danke! –

+2

Meine Tests zeigen, dass es ungefähr 30% effizienter ist, '/ \ D +/g' anstatt nur'/\ D/g' zu verwenden. var r1 =/D/g, r2 =/D +/g, s = "", MAX = 1020, i = MAX; do {s + = (i% 2)? "aaaaaaaaaaa": "11111111111"; } während ich); console.time ("\\ D"); für (var i = 0; i

3

Bearbeiten: Siehe Kobi's answer. Wenn Sie wirklich den Hash-Teil der Dinge verwenden, verwenden Sie einfach location.hash! (Zu sich selbst: Doh!)

Aber ich lasse das unten, für den Fall, dass Sie etwas Komplexeres tun, als Ihr Beispiel vorschlägt.

Ursprüngliche Antwort:

Wie die andere hat gesagt, Sie haben in Ihrem Ersatz die globale Flagge außen vor. Aber ich mache mir Sorgen wegen des Ausdrucks, es ist sehr fragil. Betrachten Sie: www.37signals.com#42: Ihre resultierende numerische Zeichenfolge wird 3742 sein, was wahrscheinlich nicht das ist, was Sie wollen. Weitere Beispiele: www.blablabla.ru/user/4#3 (43), www2.blablabla.ru#3 (23), ...

Wie ‚Kampf:

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

... mit dem Sie die zusammenhängende Reihe von Ziffern wird unmittelbar im Anschluss an das Hash-Symbol (oder nicht definiert wenn es keine gibt).

+2

Da ist location.hash. :) –

+2

@Georg: LOL !! Natürlich gibt es das, und es ist die bessere Antwort (sieht so aus, als ob Kobi es jetzt gepostet hätte). Ich lasse das (bearbeitet) für den Fall, dass er nicht wirklich den Hash verwendet, aber das war nur sein Beispiel. –

6

Verwenden Sie location.hash - dies enthält nur den Hashtag am Ende der URL: "#42".
können Sie schreiben:

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

Sie herrschen, danke! –