我想从句子中提取出标签。例如─ 如果句子是
#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。
请帮忙。
答案 0 :(得分:1)
匹配网址并匹配并捕获主题标签,只需获取第1组内容:
/\b(?:(?:https?|ftps?):\/\/|www\.)\S+|#(\w+)\b/gi
请参阅regex demo。
<强>详情:
\b(?:(?:https?|ftps?):\/\/|www\.)\S+
- 类似于网址的网址:
\b
- 字边界(?:https?|ftps?):\/\/
- http://
或https://
(或与ftp/ftps
相同)www\.
- 或www.
\S+
- 除了空格之外的1个或多个字符|
- 或#(\w+)\b
- 哈希符号,然后第1组捕获一个或多个单词字符(标签),后跟字边界。请参阅下面的JS演示:
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;
答案 1 :(得分:0)
需要一个非常复杂的正则表达式来支持我需要的东西。 最后,到目前为止我最终使用了twitter.txt库的hashtag函数。处理我遇到的所有案件。