2012-08-07 16 views
8

मैं जहां वे निम्न में से सभी मैच चाहिए "हैशटैग", की पहचान करने का उपयोग करने के जे एस regex पता लगाना पर कुछ मदद करना चाहते हैं:जावास्क्रिप्ट regex

  1. सामान्य चहचहाना शैली हैशटैग: पाठ पूर्ववर्ती साथ #foobar
  2. हैशटैग: abc123#xyz456
  3. उन में अंतरिक्ष साथ हैशटैग, जो के रूप में चिह्नित हैं: #[foo bar] (जो है, [] हैशटैग के लिए परिसीमक के रूप में कार्य करता है)

1 और 2, मैं निम्न रूप में कुछ प्रयोग कर रहा था:

var all_re =/\S*#\S+/gi; 

मैं, कुछ मदद यह पता लगाने की कैसे 3. करने के लिए इसे विस्तार करने के लिए मैं regexps में अच्छा नहीं कर रहा हूँ नहीं कर पा रहे कृप्या?

धन्यवाद!

उत्तर

31

तो यह या तो सभी गैर अंतरिक्ष वर्ण या के बीच किसी भी वर्ण (और सहित) से मेल खाना चाहिए [ और ]:

\S*#(?:\[[^\]]+\]|\S+) 

स्पष्टीकरण:

\S*    # any number of non-white space characters 
#     # matches # 
(?:    # start non-capturing group 
    \[    # matches [ 
    [^\]]+   # any character but ], one or more 
    \]    # matches ] 
    |    # OR 
    \S+   # one or more non-white space characters 
)     # end non-capturing group 

संदर्भ: alternation, negated character classes

+0

धन्यवाद फेलिक्स। मैं इसे http://www.regular-expressions.info/javascriptexample.html पर Regexp के साथ "\ S * # (?: \ S + | \ [[^ \]] + \] के रूप में आजमा रहा हूं)" और स्ट्रिंग "यह # [फू बार]" है। "शो मैच" बटन कहता है "# [foo" - क्या मैं कुछ गलत कर रहा हूं? – ragebiswas

+0

आह ऐसा लगता है कि आपको ऑर्डर को उलटना होगा क्योंकि '\ S +' '\ [... 'से अधिक सामान्य है, इसलिए यह हमेशा मेल खाता रहेगा। फिक्स्ड। –

+1

विशेष रूप से स्पष्टीकरण के लिए धन्यवाद! – ragebiswas

2

इस बारे में कैसे?

var all_re =/(\S*#\[[^\]]+\])|(\S*#\S+)/gi; 
+0

यह भी काम करता है, मैं स्पेलिक्स के स्पष्टीकरण के लिए स्वीकार कर रहा हूं। धन्यवाद xiaowl! – ragebiswas

0

मुझे एक ही समस्या थी, लेकिन केवल स्ट्रिंग शुरू होने और हैशटैग के साथ समाप्त होने पर ही मिलान करना चाहते हैं। इसी तरह की समस्या, उम्मीद है कि कोई और मेरे समाधान का उपयोग कर सकता है।

यह एक "#myhashtag" से मेल खाता है लेकिन "gfd # myhashtag" या "#myhashtag" से मेल नहीं खाता है।

/^#\S+$/

^ #start of regex
\S #Any char that is not a white space
+ #Any number of said char
$ #End of string

कि के रूप में

सरल।

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