मैं तार्किक और regex में की जरूरत है।
कुछ इस तरह
जैक और जेम्स
निम्नलिखित तार से सहमत हैं
'हाय जैक यहाँ जेम्स है '
'हाय जेम्स यहाँ जैक है '
मैं तार्किक और regex में की जरूरत है।
कुछ इस तरह
जैक और जेम्स
निम्नलिखित तार से सहमत हैं
'हाय जैक यहाँ जेम्स है '
'हाय जेम्स यहाँ जैक है '
जवाबों:
आप लुकरॉइड्स का उपयोग करके चेक कर सकते हैं :
^(?=.*\bjack\b)(?=.*\bjames\b).*$
इस दृष्टिकोण का लाभ है कि आप आसानी से कई शर्तों को निर्दिष्ट कर सकते हैं।
^(?=.*\bjack\b)(?=.*\bjames\b)(?=.*\bjason\b)(?=.*\bjules\b).*$
vimवाक्य रचना: ^\(.*\<jack\>\)\@=\(.*\<james\>\@=\).*$या\v^(.*<jack>)@=(.*<james>)@=.*$
^(?=.*\b#friday\b)(?=.*\b#tgif\b).*$मेल करने में विफल रहता है blah #tgif blah #friday blahलेकिन ^(?=.*\bfriday\b)(?=.*\btgif\b).*$ठीक काम करता है।
\bयहाँ क्या मतलब है?
प्रयत्न:
james.*jack
यदि आप एक ही समय में दोनों चाहते हैं, तो orउन्हें:
james.*jack|jack.*james
james.*?jack|jack.*?james। यह बड़े ग्रंथों पर मदद करेगा।
कमांड की व्याख्या जो मैं लिखने जा रहा हूं : -
. किसी भी चरित्र का मतलब है, अंक के स्थान पर आ सकता है।
* मतलब शून्य या उससे अधिक घटित होने वाली घटनाएँ, जो पिछले में लिखी गई हैं।
|का अर्थ है 'या' ।
इसलिए,
james.*jack
खोज करेंगे james , तो चरित्र के किसी भी संख्या तक jackआता है।
चूंकि आप jack.*jamesया तो चाहते हैंjames.*jack
इसलिए कमांड :
jack.*james|james.*jack
इसका छोटा और मीठा
(?=.*jack)(?=.*james)
विम का एक ब्रांच ऑपरेटर है \& होता है जो किसी भी क्रम में शब्दों के एक सेट वाली लाइन की खोज करते समय उपयोगी होता है। इसके अलावा, आवश्यक शब्दों के समुच्चय का विस्तार तुच्छ है।
उदाहरण के लिए,
/.*jack\&.*james
किसी भी क्रम में jackऔर james, युक्त एक रेखा से मेल खाएगा ।
उपयोग के बारे में अधिक जानकारी के लिए यह उत्तर देखें । मैं किसी भी अन्य रेगेक्स स्वाद से अवगत नहीं हूं जो ब्रांचिंग को लागू करता है; ऑपरेटर भी नियमित अभिव्यक्ति विकिपीडिया प्रविष्टि पर प्रलेखित नहीं है ।
jackऔर एकjamesबस के मामले में, दो jackया दो jamesकी अनुमति नहीं होगी, केवल एक jackऔर एक jamesवैध होगा, हम संभवतः एक अभिव्यक्ति के समान डिजाइन कर सकते हैं:
^(?!.*\bjack\b.*\bjack\b)(?!.*\bjames\b.*\bjames\b)(?=.*\bjames\b)(?=.*\bjack\b).*$
यहां, हम इन कथनों का उपयोग करते हुए उन उदाहरणों को बाहर करेंगे:
(?!.*\bjack\b.*\bjack\b)
तथा,
(?!.*\bjames\b.*\bjames\b)
हम यह भी सरल कर सकते हैं कि,
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$
यदि आप अभिव्यक्ति को सरल / संशोधित / संशोधित करना चाहते हैं, तो इसे regex101.com के ऊपरी दाएँ पैनल पर समझाया गया है । यदि आप चाहें, तो आप इस लिंक में भी देख सकते हैं कि यह कुछ नमूना आदानों के साथ कैसे मेल खाता है।
jex.im नियमित अभिव्यक्ति की कल्पना करता है:
const regex = /^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$/gm;
const str = `hi jack here is james
hi james here is jack
hi james jack here is jack james
hi jack james here is james jack
hi jack jack here is jack james
hi james james here is james jack
hi jack jack jack here is james
`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
jackऔर एकjamesइसे पहले डिजाइन भी किया जा सकता है james पिछले jackहै, तो निम्न के समान:
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b.*\bjack\b).*$
और इसके विपरीत:
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjack\b.*\bjames\b).*$