2012-11-29 12 views
15

संभव डुप्लिकेट (जर्मन में विशेष वर्ण) उमलॉट साथ समस्या है:
Javascript RegExp + Word boundaries + unicode charactersRegex शब्द सीमा b

ECMA स्क्रिप्ट regex में (यहां संदर्भ के लिए परीक्षण किया: http://regexpal.com/) मैं शब्द सीमाओं के साथ झूठी सकारात्मक (\b का उपयोग करके) और उमलॉट वर्ण। उदाहरण

regex के लिए \bPflanzen\b

"Pflanzenöl" से मेल नहीं करना चाहिए, लेकिन यह करता है। अगर मैं ö को oe में बदलता हूं तो सब कुछ काम करता है। रेगेक्स शब्दों का हिस्सा बनने के लिए उमलों पर विचार नहीं करता है हालांकि वे कई भाषाओं में हैं।

सबसे अच्छा कामकाज क्या है?

+2

... और सबसे अच्छा कामकाज XRegExp का उपयोग करना है, [इस उत्तर] के रूप में (http://stackoverflow.com/a/10591266/20938) अनुशंसा करता है। –

उत्तर

11

रेगेक्स इंजन के अलग-अलग विचार हैं कि शॉर्टेंड चरित्र वर्ग कैसे काम करते हैं। \b\w से निकटता से जुड़ा हुआ है जो लगभग सभी regex कार्यों में लगभग बेकार है लेकिन दुखद रूप से अपने निरंतर अस्तित्व को न्यायसंगत साबित करने के लिए कई मामलों के लिए "पर्याप्त पर्याप्त" साबित करता है।

इस मामले में, जावास्क्रिप्ट केवल \w के लिए ASCII [a-zA-Z0-9_] मानता है और \b के बाद से \w से एक चरित्र और कुछ है कि नहीं कर रहा है आप मनाया व्यवहार मिलेगा जो स्थान से मेल खाता है।

सामान्य वैकल्पिक हल \b के बजाय lookaround उपयोग करने के लिए है:

(?<![a-zA-ZäöüßÄÖÜ])Pflanzen((?![a-zA-ZäöüßÄÖÜ])) 

हालांकि, जावास्क्रिप्ट भी lookbehind का समर्थन नहीं करता है, तो हम कुछ और करने की जरूरत है:

(^|[^a-zA-ZäöüßÄÖÜ])Pflanzen(?![a-zA-ZäöüßÄÖÜ]) 

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

+0

[ईसीएमएस्क्रिप्ट समुदाय] (http://www.ecmascript.org/community.php) में शामिल हों और यह कहें कि यह ईसीएमएस्क्रिप्ट एड 6, हार्मनी, ईएस नेक्स्ट, जो भी हो, में क्यों होना चाहिए। – RobG

+0

मुझे लगता है कि "क्यों" काफी स्पष्ट है कि जेएस में लिखी गई बड़ी मात्रा में सॉफ़्टवेयर (जिसे अलग-अलग भाषाओं को संभालने की भी आवश्यकता है) प्राप्त करें। उचित यूनिकोड समर्थन की कमी इन दिनों किसी भाषा या इसकी मानक लाइब्रेरी से एक गंभीर और भयानक चूक है। किसी भी मामले में, मैं एक विनिर्देश या मानक लेखक नहीं हूँ। मेरे पास जावास्क्रिप्ट का सुराग भी नहीं है; मैं शामिल होने के लिए गलत व्यक्ति होगा। – Joey

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