[javascript] गैर लालची में नियमित अभिव्यक्ति कैसे करें?


Answers

आप सही हैं कि लालच एक मुद्दा है:

--A--Z--A--Z--
  ^^^^^^^^^^
     A.*Z

यदि आप A--Z दोनों से मेल खाना चाहते हैं, तो आपको A.*?Z (द ? * अनिच्छुक "या आलसी बनाता है) का उपयोग करना होगा।

ऐसा करने के लिए कभी-कभी बेहतर तरीके होते हैं, उदाहरण के लिए, उदाहरण के लिए

A[^Z]*+Z

बैकट्रैकिंग को कम करने के लिए यह नकारात्मक चरित्र वर्ग और स्वामित्व वाले क्वांटिफ़ायर का उपयोग करता है, और यह अधिक कुशल होने की संभावना है।

आपके मामले में, रेगेक्स होगा:

/(\[[^\]]++\])/

दुर्भाग्यवश जावास्क्रिप्ट regex स्वामित्व मात्रात्मक का समर्थन नहीं करता है, तो आपको बस इसके साथ करना होगा:

/(\[[^\]]+\])/

यह भी देखें

त्वरित सारांश

*   Zero or more, greedy
*?  Zero or more, reluctant
*+  Zero or more, possessive

+   One or more, greedy
+?  One or more, reluctant
++  One or more, possessive

?   Zero or one, greedy
??  Zero or one, reluctant
?+  Zero or one, possessive

ध्यान दें कि अनिच्छुक और स्वामित्व वाले क्वांटिफायर सीमित पुनरावृत्ति {n,m} संरचनाओं पर भी लागू होते हैं।

जावा में उदाहरण:

System.out.println("aAoZbAoZc".replaceAll("A.*Z", "!"));  // prints "a!c"
System.out.println("aAoZbAoZc".replaceAll("A.*?Z", "!")); // prints "a!b!c"

System.out.println("xxxxxx".replaceAll("x{3,5}", "Y"));  // prints "Yx"
System.out.println("xxxxxx".replaceAll("x{3,5}?", "Y")); // prints "YY"
Question

मैं jQuery का उपयोग कर रहा हूँ। मेरे पास विशेष वर्णों (प्रारंभ और अंत) के ब्लॉक के साथ एक स्ट्रिंग है। मैं उस विशेष वर्ण ब्लॉक से पाठ प्राप्त करना चाहता हूं। मैंने इन-स्ट्रिंग खोज के लिए नियमित अभिव्यक्ति ऑब्जेक्ट का उपयोग किया। लेकिन दो विशेष चरित्र या अधिक होने पर मैं एकाधिक परिणामों को खोजने के लिए jQuery को कैसे बता सकता हूं?

मेरा एचटीएमएल:

<div id="container">
    <div id="textcontainer">
     Cuộc chiến pháp lý giữa [|cơ thử|nghiệm|] thị trường [|test2|đây là test lần 2|] chứng khoán [|Mỹ|day la nuoc my|] và ngân hàng đầu tư quyền lực nhất Phố Wall mới chỉ bắt đầu.
    </div>
</div>

और मेरा जावास्क्रिप्ट कोड:

$(document).ready(function() {
  var takedata = $("#textcontainer").text();
  var test = 'abcd adddb';
  var filterdata = takedata.match(/(\[.+\])/);

  alert(filterdata); 

  //end write js 
});

मेरा नतीजा है: [| cơ thử | nghiệm |] thị trường [| test2 | đây là test lần 2 |] chứng khoán [| mỹ | day la nuoc my |] । लेकिन यह नतीजा यह नहीं है कि मैं चाहता हूं :(। समय के लिए समय [1] [डेमो] के लिए [पाठ] कैसे प्राप्त करें?

मैंने इंटरनेट ^^ पर जानकारी खोजने के बाद अभी अपना काम किया है। मैं इस तरह कोड बना देता हूं:

var filterdata = takedata.match(/(\[.*?\])/g);
  • मेरा परिणाम है: [| cơ thử | nghiệm |], [| test2 | đây là test lần 2 |] यह सही है! लेकिन मैं वास्तव में यह समझ में नहीं आता। क्या आप मेरा जवाब दे सकते हैं?



Related