2010-03-11 8 views
7

Necesito hacer un juego no codicioso y espero que alguien me pueda ayudar. Tengo el siguiente, y estoy usando JavaScript y ASPConcordancia no codiciosa de expresiones regulares, JavaScript y ASP

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

El partido por encima de los partidos de la primera salida de una etiqueta href. Necesito que coincida solo con el último href que forma parte de la carpeta /pdf/.

¿Alguna idea?

Respuesta

6

Es necesario utilizar paréntesis de captura para la sub-expresión coincide:

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

Partido devolverá un array con todo el partido en el índice 0, todas las capturas de expresión sub serán añadidos a la matriz en el orden en que emparejado En este caso, el índice 1 contiene la sección correspondiente \/pdf\/.*?\.pdf.


Pruebe y haga que su expresión regular sea más específica que solo .*? si coincide a grandes rasgos. Por ejemplo:

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

[^"]+? coincidirá con pereza una cadena de caracteres que no contiene el carácter de comillas dobles. Esto limitará el partido a su estancia dentro de las comillas, por lo que el partido no será demasiado amplia en la siguiente secuencia, por ejemplo:

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

Esto me da /pdf/filename.pdf, pero necesito conseguir < a href = "somedirecrories/pdf/filename.pdf" pero estoy quitando el enlace del código html y hay referencias a otros href más arriba en el documento - Así que creo que necesito algún tipo de coincidencia de patrón –

+0

@Gerald: Lo siento, No me di cuenta de que es lo que querías decir. He actualizado mi respuesta. –

+0

Perfecto exactamente lo que estaba buscando - gracias Andy –

Cuestiones relacionadas