我要做的是匹配字符串中的主题标签,但主题标签中可能有一个空格:#brown fox
。大多数主题标签都是单个字词#brown
,#fox
,但有些标签格式不正确,导致输入空格。
包含空格的主题标签只允许包含两个单词,因此允许使用#space suit
,但不允许使用#brown fox jumps
。
brown, fox, jumps
brown fox, jumps
brown fox, jumps, dog
如果有一个主题标签,后跟一个单词,然后是一个主题标签,那么我们可以假设该单词是针对该主题标签的。否则,我们不应该在小组中捕获它。
这是我到目前为止所尝试的内容,但显然它与我的需求无关: https://regex101.com/r/vHOCaf/1
(\#+\w{2,})|(\#([\w]){2,}\s{0,1}([\w]){2,})
答案 0 :(得分:4)
我认为这就是你想要的:/#(?:\w+\b)(?: ?\w*\b)/g
,它在#
之后最多匹配2个字,或者如果第二个字也有#
则只匹配一个。
在此处查看:https://regex101.com/r/Bq0qNM/2
[编辑]如果后面没有#
,则将正则表达式更改为与第二个单词不匹配:
/#(?:(?:\w+\b \w+\b)(?= #|$)|\w+\b)/g
请在此处查看结果:https://regex101.com/r/Bq0qNM/3
[编辑]较短的
/#(?:\w+ ?\w+(?= #|$)|\w+\b)/g
,https://regex101.com/r/Bq0qNM/4
答案 1 :(得分:1)
答案 2 :(得分:0)
这个怎么样
#(\w+(?:\s+\w+)?)