使用正则表达式解析句子

时间:2016-12-26 13:10:44

标签: javascript regex hashtag

我想从句子中提取出标签。例如─ 如果句子是

#test1.#test2 #test3 www.google.com/#test4 www.google.com/hello#test5

主题标签将是

#test1
#test2 
#test3 

但不是#test4或#test5,因为它们是网址的一部分

我试图为此制作正则表达式。到现在为止我已经

/(^|\s)#(\w+)\b/g

https://regex101.com/r/WPeSdE/1

这会处理#test1和#test3,但无法获得#test2。

请帮忙。

2 个答案:

答案 0 :(得分:1)

匹配网址并匹配并捕获主题标签,只需获取第1组内容:

/\b(?:(?:https?|ftps?):\/\/|www\.)\S+|#(\w+)\b/gi

请参阅regex demo

<强>详情:

  • \b(?:(?:https?|ftps?):\/\/|www\.)\S+ - 类似于网址的网址:
    • \b - 字边界
    • (?:(?:https?| ftps?):// | www。)` - 以下任一项:
      • (?:https?|ftps?):\/\/ - http://https://(或与ftp/ftps相同)
      • www\. - 或www.
    • \S+ - 除了空格之外的1个或多个字符
  • | - 或
  • #(\w+)\b - 哈希符号,然后第1组捕获一个或多个单词字符(标签),后跟字边界。

请参阅下面的JS演示:

&#13;
&#13;
var rx = /\b(?:(?:https?|ftps?):\/\/|www\.)\S+|#(\w+)\b/gi;
var str = `#test1.#test2 #test3 www.google.com/#test4 www.google.com/hello#test5`;
var m, res =[];
while ((m = rx.exec(str)) !== null) {
   if (m[1]) res.push(m[1]);
}
console.log(res);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

需要一个非常复杂的正则表达式来支持我需要的东西。 最后,到目前为止我最终使用了twitter.txt库的hashtag函数。处理我遇到的所有案件。