用于匹配类似Twitter的主题标签的Javascript正则表达式

时间:2012-08-07 13:21:23

标签: javascript regex

我想帮助找出用于识别“hashtags”的JS正则表达式,它们应该匹配以下所有内容:

  1. 通常的twitter风格主题标签:#foobar
  2. 前面带有文字的Hashtags:abc123#xyz456
  3. 其中带有空格的Hashtags,表示为:#[foo bar](即[]作为主题标签的分隔符)
  4. 对于1和2,我使用的是以下形式的东西:

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

    我似乎无法弄清楚如何将它扩展到3.我不擅长正则表达式,请帮忙吗?

    谢谢!

3 个答案:

答案 0 :(得分: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

参考alternationnegated character classes

答案 1 :(得分:2)

这个怎么样?

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

答案 2 :(得分: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

这很简单。