2010-03-11 22 views
7

मुझे एक लालची मैच करने की ज़रूरत है और उम्मीद है कि कोई मेरी मदद कर सकता है। मेरे पास निम्नलिखित है, और मैं जावास्क्रिप्ट और एएसपीगैर लालची रेगेक्स मैच, जावास्क्रिप्ट और एएसपी

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

उपरोक्त मैच, एक href टैग की पहली शुरुआत से मेल खाता है। मुझे केवल उस अंतिम href से मेल खाने की आवश्यकता है जो /pdf/ फ़ोल्डर का हिस्सा है।

कोई विचार?

उत्तर

6

आप उप-अभिव्यक्ति के लिए कब्जा करने कोष्ठक का उपयोग करने की आवश्यकता से मेल खाता है:

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

मैच सूचकांक 0 पर पूरे मैच के साथ एक सरणी वापस आ जाएगी, सभी उप अभिव्यक्ति कैप्चर क्रम में सरणी में जोड़ दिया जाएगा वे मिलान नहीं हुआ। इस मामले में, सूचकांक 1 में \/pdf\/.*?\.pdf से मिलान करने वाला अनुभाग शामिल है।


प्रयास करें और बस .*? अगर यह बहुत मोटे तौर पर मिलान है की तुलना में अपने रेगुलर एक्सप्रेशन से और सटीक बनाएं। उदाहरण के लिए:

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

[^"]+? lazily वर्णों की स्ट्रिंग है कि दोहरे उद्धरण वर्ण नहीं हैं से मेल खाएगी। इस उद्धरण के भीतर रहने के लिए मैच तक सीमित कर देगा, तो मैच निम्नलिखित स्ट्रिंग में बहुत व्यापक नहीं होगा, उदाहरण के लिए:

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

यह मैं /pdf/filename.pdf देता है, लेकिन मैं प्राप्त करने की आवश्यकता < a href = "somedirecrories/pdf/filename.pdf" लेकिन मैं HTML कोड से लिंक को अलग कर रहा हूं और दस्तावेज़ में अन्य href के ऊपर संदर्भ हैं - इसलिए मुझे लगता है कि मुझे किसी प्रकार के पैटर्न मिलान की आवश्यकता है –

+0

@Gerald: क्षमा करें, मुझे एहसास नहीं हुआ कि आपका मतलब क्या है। मैंने अपना जवाब अपडेट कर लिया है। –

+0

बिल्कुल सही जो मैं खोज रहा था - धन्यवाद एंडी –

संबंधित मुद्दे