2010-03-11 18 views
7

Ho bisogno di fare una partita non avara e spero che qualcuno possa aiutarmi. Ho il seguente, e sto usando JavaScript e ASPCorrispondenza regex non avida, JavaScript e ASP

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

La corrispondenza di cui sopra corrisponde al primo avvio di un tag href. Mi serve per abbinare solo l'ultimo href che fa parte della cartella /pdf/.

qualche idea?

risposta

6

È necessario utilizzare le parentesi cattura per sub-espressione corrisponde:

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

match restituisce un array con l'intera partita in corrispondenza dell'indice 0, tutte le catture di espressione sub saranno aggiunti alla matrice nell'ordine in cui abbinato. In questo caso, l'indice 1 contiene la sezione corrispondente allo \/pdf\/.*?\.pdf.


Prova e rendi il tuo regex più specifico di solo .*? se corrisponde troppo ampiamente. Per esempio:

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

[^"]+? sarà pigramente abbinare una stringa di caratteri che non contiene il carattere di virgolette. Ciò limita la partita per rimanere all'interno le virgolette, in modo che il match non sarà troppo ampia nel seguente stringa, per esempio:

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

Questo mi dà /pdf/filename.pdf, ma ho bisogno di ottenere < a href = "somedirecrories/pdf/nomefile.pdf" ma sto rimuovendo il link dal codice html e ci sono riferimenti ad altri href più in alto nel documento - Quindi immagino di aver bisogno di una sorta di pattern match –

+0

@Gerald: Sorry, Sorry Non avevo capito che è quello che intendevi. Ho aggiornato la mia risposta. –

+0

Perfetto esattamente quello che stavo cercando - grazie Andy –

Problemi correlati