使用正则表达式解析句子中的主题标签
Using regex to parse hashtags from a sentence
我想从一个句子中提取主题标签。例如-
如果句子是
#test1.#test2 #test3 www.google.com/#test4 www.google.com/hello#test5
主题标签将是
#test1
#test2
#test3
但不是#test4 或#test5,因为它们是 URL 的一部分
我正试图为此制作正则表达式。到现在我有
/(^|\s)#(\w+)\b/g
https://regex101.com/r/WPeSdE/1
这会处理#test1 和#test3,但无法获取#test2。
请帮忙。
匹配 URLs 并匹配 并捕获 主题标签,然后只获取第 1 组内容:
/\b(?:(?:https?|ftps?):\/\/|www\.)\S+|#(\w+)\b/gi
参见regex demo。
详情:
\b(?:(?:https?|ftps?):\/\/|www\.)\S+
- 类似 URL 的模式:
\b
- 单词边界
- (?:(?:https?|ftps?)://|www.)` - 以下任一项:
(?: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);
需要一个非常复杂的正则表达式来支持我所需要的。
最后,现在我最终使用了 twitter.txt 库的 hashtag 函数。处理我遇到的所有情况。
我想从一个句子中提取主题标签。例如- 如果句子是
#test1.#test2 #test3 www.google.com/#test4 www.google.com/hello#test5
主题标签将是
#test1
#test2
#test3
但不是#test4 或#test5,因为它们是 URL 的一部分
我正试图为此制作正则表达式。到现在我有
/(^|\s)#(\w+)\b/g
https://regex101.com/r/WPeSdE/1
这会处理#test1 和#test3,但无法获取#test2。
请帮忙。
匹配 URLs 并匹配 并捕获 主题标签,然后只获取第 1 组内容:
/\b(?:(?:https?|ftps?):\/\/|www\.)\S+|#(\w+)\b/gi
参见regex demo。
详情:
\b(?:(?:https?|ftps?):\/\/|www\.)\S+
- 类似 URL 的模式:\b
- 单词边界- (?:(?:https?|ftps?)://|www.)` - 以下任一项:
(?: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);
需要一个非常复杂的正则表达式来支持我所需要的。 最后,现在我最终使用了 twitter.txt 库的 hashtag 函数。处理我遇到的所有情况。