2013-06-05 2 views
11

की अनुमति देता है, मैं चाहता हूं कि एक रेगेक्स एक साधारण हैशटैग से मेल खाता है जैसे कि ट्विटर (उदा। # सॉमवार्ड)। मैं इसे गैर मानक पात्रों (जैसे स्पैनिश, हिब्रू या चीनी में) पहचानना चाहता हूं।एक (ट्विटर की तरह) हैशटैग के लिए रेगेक्स जो गैर-ASCII वर्ण

यह मेरा प्रारंभिक रेगेक्स था: (^|\s|\b)(#(\w+))\b
-> लेकिन यह गैर मानक पात्रों को नहीं पहचानता है।
फिर, मैंने XRegExp.js का उपयोग करने का प्रयास किया, जो काम करता था, लेकिन बहुत धीरे-धीरे भाग गया।

इसे कैसे करें इसके लिए कोई सुझाव?

+0

वर्ड सीमा का उपयोग यूनिकोड के साथ नहीं किया जा सकता है। देखें http://www.unicode.org/reports/tr18/#Default_Word_Boundaries – Toto

उत्तर

7

आखिर में मुझे यह मिला: twitter-text.js उपयोगी लिंक, जो मूल रूप से इस समस्या को हल करने वाला ट्विटर है।

+0

उत्कृष्ट रेपो यहां स्थानांतरित किया गया है: https://github.com/twitter/twitter-text/tree/master/js जहां इसे सभी भाषाओं के लिए एक सूची के साथ एकत्रित किया गया था: https://github.com/twitter/twitter-text – user1128896

0

#([^#]+)[\s,;]*

स्पष्टीकरण: यह नियमित अभिव्यक्ति एक # एक या अधिक गैर # पात्रों द्वारा पीछा किया, 0 या अधिक रिक्त स्थान, अल्पविराम या अर्धविराम के बाद के लिए खोज करेंगे।

var input = "#hasta #mañana #babהַ"; 
var matches = input.match(/#([^#]+)[\s,;]*/g); 

परिणाम:

["#hasta ", "#mañana ", "#babהַ"] 

संपादित करें - शब्द सीमा के लिए बदला गया \ b

+0

'+' के बाद '?' का मतलब है कि सभी गैर-हैश पात्रों से मेल खाने का प्रयास करते समय "बहुत लालची मत बनो"। – itsmejodie

+0

मुझे नहीं लगता कि '\ b' गैर-लैटिन वर्णों के साथ काम करता है। – georg

+1

'?' के साथ यह '# मन्ना' से मेल नहीं खाता है और इसके बिना इसे 'हन्नात बेबी' के रूप में एक हैशटैग के रूप में दोबारा शुरू किया जाता है। हिब्रू का जिक्र नहीं करना - बिल्कुल पहचान नहीं है। – limlim

2

देशी जे एस regexes कि यूनिकोड का समर्थन नहीं करते के साथ, अपने ही एकमात्र विकल्प स्पष्ट रूप से अक्षर हैं जो समाप्त कर सकते हैं की गणना करने में है टैग और अन्य सभी से मेल खाएं, उदाहरण के लिए:

> s = "foo #הַתִּקְוָה. bar" 
"foo #הַתִּקְוָה. bar" 
> s.match(/#(.+?)(?=[\s.,:,]|$)/) 
["#הַתִּקְוָה", "הַתִּקְוָה"] 

[\s.,:,] में रिक्त स्थान, विराम चिह्न शामिल होना चाहिए और जो कुछ भी एक समापन प्रतीक माना जा सकता है।

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