2010-08-17 5 views
11

में एकाधिक शब्दों की शुरुआत के लिए रेगेक्स मैच जावास्क्रिप्ट में मैं एक निश्चित वाक्यांश से शुरू होने वाली तारों से मिलान करने में सक्षम होना चाहता हूं। हालांकि, मैं चाहता हूं कि यह वाक्यांश में किसी भी शब्द की शुरुआत से मेल नहीं खा सके, न केवल वाक्यांश की शुरुआत।स्ट्रिंग

उदाहरण के लिए:

वाक्यांश: "वें"

परिणाम:: गु मेल और वें

संपादित करें: \ ख अच्छा काम करता है

मिलान करने की आवश्यकता "यह सबसे अच्छा है" हालांकि यह एक और मुद्दा प्रस्तावित करता है:

यह विदेशी लोगों के बाद भी पात्रों से मेल खाता है। उदाहरण के लिए यदि मेरी स्ट्रिंग "मैन" है, और मैं "एन" की खोज करता हूं, तो यह एम के बाद एमए से मेल खाएगा ... कोई विचार?

उत्तर

23
"This is the best moth".match(/\bth/gi); 

या एक चर के साथ अपने स्ट्रिंग

var string = "This is the best moth"; 
alert(string.match(/\bth/gi)); 

\b एक regex में के लिए एक शब्द सीमा तो \bth केवल एक th से मेल खाएगी है कि एक शब्द के प्रारंभ में।

gi एक वैश्विक मैच (सभी घटनाओं के लिए देखो) और केस संवेदी

(मैं moth वहाँ में करने के लिए जाँच करने के लिए है कि यह मेल नहीं खाता है फेंक दिया एक चेतावनी के रूप)

jsFiddle example


के लिए है

संपादित करें:

तो, एक बोव केवल उस भाग को लौटाता है जो आप मेल खाते हैं (th)। यदि आप पूरे शब्द वापस करना चाहते हैं, तो आपको पूरे शब्द से मेल खाना पड़ेगा।

यह वह जगह है जहां चीजें मुश्किल तेजी से मिलती हैं। कोई HTML इकाई पत्र के साथ पहली:

string.match(/\bth[^\b]*?\b/gi); 

Example

मिलान करने के लिए पूरे शब्द शब्द सीमा \b हड़पने से जाना th गैर शब्द सीमाओं [^\b] के बाद जब तक आप एक और शब्द सीमा \b को मिलता है। * का अर्थ है कि आप ? चिह्न का 0 या अधिक पिछला (गैर शब्द सीमाएं) देखना चाहते हैं, इसका मतलब है कि यह एक आलसी मैच है। दूसरे शब्दों में यह जितना बड़ा हो सके उतना बड़ा विस्तार नहीं करता है, लेकिन पहले अवसर पर रुक जाता है।

यदि आपके पास ä (ä) जैसे HTML इकाई वर्ण हैं तो चीजें वास्तव में जटिल हो जाती हैं, और आपको व्हाइटस्पेस या व्हाइटस्पेस और परिभाषित वर्णों का एक सेट उपयोग करना होगा जो शब्द सीमाओं पर हो सकते हैं।

string.match(/\sth[^\s]*|^th[^\s]*/gi); 

Example with HTML entities.

जब से हम शब्द सीमाओं का उपयोग नहीं कर रहे हैं, हम अलग स्ट्रिंग की शुरुआत (|^) की देखभाल करने के लिए है।

उपर्युक्त शब्दों की शुरुआत में सफेद स्थान पर कब्जा करेगा। \b का उपयोग सफेद स्थान पर कब्जा नहीं करेगा, क्योंकि \b की कोई चौड़ाई नहीं है।

+4

+1 मुझे परिचय देने के लिए धन्यवाद \ b :) –

+0

@ माइकल - वाईडब्ल्यू! यह रेगेक्स के लिए एक महान संदर्भ है - http://www.regular-expressions.info/reference.html –

+0

यह बहुत अच्छा काम करता है, सिवाय इसके कि यह विदेशी लोगों के बाद वर्णों से मेल खाएगा। उदाहरण के लिए यदि मेरी स्ट्रिंग "मैन" है, और मैं "एन" की खोज करता हूं, तो यह एम के बाद एमए से मेल खाएगा ... कोई विचार? – Abadaba

1

उपयोग करें:

string.match(/^th|\sth/gi); 

उदाहरण:

'is this is a string'.match(/^th|\sth/gi); 


'the string: This is a string'.match(/^th|\sth/gi); 

परिणाम:

[ "वें" "गु"]

[ "वें"]

+1

चूंकि सेशन का उल्लेख है, 'कोई भी शब्द' शब्द सीमा के लिए स्थान ग्रहण करना सुरक्षित नहीं हो सकता है। आपका रेगेक्स कुछ भी नहीं मिला है, 'यहां-द-दंड!'। यही कारण है कि एक शब्द सीमा के रूप में '\ b' बेहतर है। –

1
var matches = "This is the best".match(/\bth/ig); 

रिटर्न:

["Th", "th"] 

नियमित अभिव्यक्ति का अर्थ है: मैच "वें" मामले की अनदेखी और विश्व स्तर पर (अर्थात, वह सिर्फ एक मैच में बंद नहीं है) करता है, तो "वें" में पहला शब्द है स्ट्रिंग या यदि "वें" स्पेस कैरेक्टर से पहले है।

+0

चूंकि सेशन का उल्लेख है, 'कोई भी शब्द' शब्द सीमा के लिए स्थान ग्रहण करना सुरक्षित नहीं हो सकता है। आपका रेगेक्स कुछ भी नहीं मिला है, 'यहां-द-दंड!'। यही कारण है कि एक शब्द सीमा के रूप में '\ b' बेहतर है। –

+0

@ पीटर धन्यवाद! '\ B' के बारे में नहीं पता था! –

+0

@Vivn - आपका उदाहरण अभी भी लाइन चरित्र '^' की शुरुआत के कारण "थ" से मेल खाता है। एक स्ट्रिंग पर लाइन की शुरुआत के लिए एक वैश्विक खोज अभी भी केवल 1 मिलती है;) - http://jsfiddle.net/NHcLx/ –

1

रेगेक्स में g ध्वज का उपयोग करें। यह "वैश्विक" है, मुझे लगता है, और यह केवल पहले के बजाय सभी मैचों की खोज करता है।

आपको केस-असंवेदनशील मिलान के लिए i ध्वज का भी उपयोग करना चाहिए।

आप उदाहरण के लिए new RegExp(pattern, flags)

करने के लिए एक दूसरा पैरामीटर regex (/<regex>/<flags>) के अंत करने के लिए या के रूप में झंडे जोड़ें:

var matches = "This is the best".match(/\bth/gi); 

या, RegExp वस्तुओं का उपयोग कर:

var re = new RegExp("\\bth", "gi"); 
var matches = re.exec("This is the best"); 

संपादित करें: रेगेक्स टी में \b का उपयोग करें ओ बी शब्द के शब्द से मेल खाता है। ध्यान दें कि यह वास्तव में किसी भी विशिष्ट चरित्र से मेल नहीं खाता है, लेकिन किसी शब्द या स्ट्रिंग की शुरुआत या अंत।

+0

लेकिन इस स्ट्रिंग जो मैं – Abadaba

+0

यह नहीं करना चाहती भी स्ट्रिंग में 'moth' से मेल खाएगी में शब्दों के बीच में खोज करेंगे। –

+0

यह 'वें' की सभी घटनाओं से मेल खाएगा, भले ही वे किसी शब्द की शुरुआत में हों या नहीं। –

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