2010-04-25 10 views
13

मैं रेगुलर एक्सप्रेशन वर्ण '<' को कैसे बनाना होगा ('a' या उन्हें 'या' मजबूत ') द्वारा पीछा नहींनियमित अभिव्यक्ति - चरित्र '<' से मेल नहीं खाती है ('ए' या 'em' या 'strong')?

तो <hello और <string से मेल खाएंगे, लेकिन <strong नहीं होगा।

अद्यतन: Btw, भाषा मैं उपयोग कर रहा हूँ है जावास्क्रिप्ट

उत्तर

32

इस प्रयास करें:

<(?!a|em|strong) 
+0

+1 मुझे लगता है कि यह पर्ल-संगत regexp वाक्यविन्यास के लिए करता है। (अन्य वाक्यविन्यासों के लिए, यह अलग हो सकता है) –

+0

इसे आजमाया और यह अच्छा काम करता है, धन्यवाद – Kyle

+1

बस अगर कोई दिलचस्पी लेता है, तो '?!' नकारात्मक दिखने लगता है। मुझे यहां लुकराउंड का एक अच्छा अवलोकन मिला: http://www.rexegg.com/regex-lookarounds.html – schnatterer

7

आप एक negative lookahead उपयोग करते हैं, जिसके लिए सरलतम रूप (इस समस्या के लिए) है:

<(?!a|em|strong) 

इसके साथ एक मुद्दा यह है कि यह <applet> को अनदेखा कर देगा। इससे निपटने का एक तरीका \b का उपयोग करके है, जो एक शून्य-चौड़ाई अभिव्यक्ति है (जिसका अर्थ है कि यह इनपुट में से कोई भी कैप्चर नहीं करता है) जो किसी शब्द को गैर-शब्द या शब्द-शब्द में गैर-शब्द से मेल खाता है। शब्द वर्ण [0-9a-zA-Z_] हैं। तो:

<(?!(a|em|strong)\b) 
2

अपने regex इंजन इसका समर्थन करता है, तो एक नकारात्मक अग्रदर्शी दावे का उपयोग करें: इस स्ट्रिंग में आगे लग रहा है, और सफल होता है यह मेल नहीं होता; हालांकि, यह किसी भी इनपुट का उपभोग नहीं करता है। इस प्रकार, आप /<(?!(?:a|em|strong)\b)/ चाहते हैं: < से मिलान करें, फिर a,, या strong कोई शब्द ब्रेक, \b के बाद सफल हो।

+0

शब्द ब्रेक के बारे में दिलचस्प बिंदु, हालांकि ओपी ने यह नहीं कहा कि वह वांछित था या नहीं –

2

हालांकि एंड्रयू का उत्तर स्पष्ट रूप से बेहतर है, इससे पहले, मुझे इसे [^(?:a|em|strong)] के साथ काम करने के लिए भी मिला।

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

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