मैं एक जटिल क्वेरी के आधार पर तार का एक संग्रह फिल्टर करने के लिए की जरूरत है - में यह है "कच्चे" फार्म यह इस तरह दिखता है:जावास्क्रिप्ट regex पैटर्न मैच कई तार (और, या) एक स्ट्रिंग के खिलाफ
nano* AND (regulat* OR *toxic* OR ((risk OR hazard) AND (exposure OR release)))
तार में से एक का एक उदाहरण से मिलान करने के खिलाफ:
Workshop on the Second Regulatory Review on Nanomaterials, 30 January 2013, Brussels
तो, मैं का उपयोग कर और या और वाइल्डकार्ड वर्णों से मेल खानी चाहिए - तो, मुझे लगता है मैं जावास्क्रिप्ट में एक regex का उपयोग करना होगा।
मैं यह सब सही ढंग से पाशन, छानने और आम तौर पर काम कर रहा है, लेकिन मैं 100% यकीन है कि मेरे regex गलत है हूँ - और कुछ परिणाम को गलत तरीके से छोड़े गए किया जा रहा है - यहाँ यह है:
/(nano[a-zA-Z])?(regulat[a-zA-Z]|[a-zA-Z]toxic[a-zA-Z]|((risk|hazard)*(exposure|release)))/i
किसी भी मदद करेगा बहुत सराहना कीजिए - मैं वास्तव में इस वाक्यविन्यास को समझने के लिए अपने दिमाग को सही ढंग से अमूर्त नहीं कर सकता!
अद्यतन:
कुछ लोगों जिस क्रम में regex का निर्माण किया है के महत्व को इंगित करते हैं, फिर भी मैं पाठ स्ट्रिंग्स कि खोज की जाएगी पर कोई नियंत्रण नहीं है, इसलिए मैं एक समाधान है कि कर सकते हैं खोजने की जरूरत है आदेश या तो परवाह किए बिना काम करते हैं।
अद्यतन:
अंततः चहचहाना एपीआई 1.0 की निंदा की वजह से, एक PHP समाधान का इस्तेमाल किया है, उदाहरण के समारोह के लिए pastebin (मैं जानता हूँ कि इसे यहाँ कोड पेस्ट करने के लिए बेहतर है, लेकिन वहाँ एक बहुत कुछ है ...) देखें:
समारोह: http://pastebin.com/MpWSGtHK उपयोग: http://pastebin.com/pP2AHEvk
सभी के लिए धन्यवाद मदद
आप का प्रयास करना चाहें [एक जीवित RegExp परीक्षण उपकरण] (http://www.gethifi.com/tools/regex)। – Barney
आपके उदाहरण स्ट्रिंग में, 'नैनो' 'नियामक' के बाद आता है, लेकिन आपके रेगेक्स में, यह दूसरी तरफ गोल है। क्या इस में कोई अपेक्षित पैटर्न है कि कोई हमेशा दूसरे के सामने आ जाएगा? कुछ और उदाहरण आपकी आवश्यकता को समझाने में मदद करेंगे। –
@ बार्नी - अच्छी सलाह, इस तरह मुझे यह –