2010-03-11 12 views
7

Ich muss ein nicht gieriges Spiel und hoffe, jemand kann mir helfen. Ich habe folgendes, und ich benutze JavaScript und ASPNicht gierig Regex übereinstimmen, JavaScript und ASP

match(/\href=".*?\/pdf\/.*?\.pdf/) 

Die obige Übereinstimmung, entspricht dem ersten Start eines href-Tags. Ich brauche es, um nur den letzten href zu entsprechen, der Teil des Ordners /pdf/ ist.

irgendwelche Ideen?

Antwort

6

Sie müssen sich für Unterausdruck Erfassung Klammer verwenden, übereinstimmt:

match(/\href=".*?(\/pdf\/.*?\.pdf)/)[1]; 

Spiel wird ein Array mit dem gesamten Spiel bei Index 0, alle Unter Ausdruck Captures in der Reihenfolge der Anordnung hinzugefügt werden kehren sie abgestimmt. In diesem Fall enthält der Index 1 den Abschnitt, der zu \/pdf\/.*?\.pdf passt.


Versuchen Sie und machen Sie Ihre Regex spezifischer als nur .*?, wenn es zu weit passt. Zum Beispiel:

match(/\href="([^"]+?\/pdf\/[^\.]+?\.pdf)"/)[1]; 

[^"]+? lazily wird eine Reihe von Zeichen übereinstimmen, die nicht die doppelten Anführungszeichen enthält. Dies wird begrenzen, das Spiel innerhalb der Anführungszeichen zu bleiben, so dass das Spiel nicht zu breit sein, in der folgenden Zeichenkette, zum Beispiel:

<a href="someurl/somepage.html">Test</a><a href="dir/pdf/file.pdf">Some PDF</a> 
+0

Das gibt mir /pdf/filename.pdf, aber ich brauche zu bekommen < a href = "somedirecorories/pdf/filename.pdf" aber ich entferne den Link von HTML-Code und es gibt Verweise auf andere href höher oben im Dokument - So denke ich, ich brauche eine Art Muster übereinstimmen –

+0

@Gerald: Sorry, Ich wusste nicht, dass du das meintest. Ich habe meine Antwort aktualisiert. –

+0

Perfekt genau das, was ich gesucht habe - danke Andy –