8

我需要一些帮助来找出用于识别“主题标签”的 JS 正则表达式,它们应该匹配以下所有内容:

  1. 通常的推特风格标签:#foobar
  2. 带有文字的标签:abc123#xyz456
  3. 带有空格的标签,表示为:(#[foo bar]即 [] 用作标签的分隔符)

对于 1 和 2,我使用了以下形式:

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

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

谢谢!

4

3 回答 3

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

参考交替否定字符类

于 2012-08-07T13:25:26.333 回答
2

这个怎么样?

var all_re =/(\S*#\[[^\]]+\])|(\S*#\S+)/gi;
于 2012-08-07T13:24:48.293 回答
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

就那么简单。

于 2013-08-27T10:15:59.513 回答