javascript - 如何在 JavaScript 中为特殊条件设置正则表达式?
问题描述
我需要帮助来编写针对这些条件的正则表达式模式:
Hashtag 字符的限制
长度
您只需在单词前添加 # 即可使其成为主题标签。但是,由于一条推文仅限于 140 个字符以下,因此最好的主题标签是由单个单词或几个字母组成的标签。Twitter 专家建议将关键字保持在 6 个字符以下。
在关键字中仅使用数字和字母。您可以使用下划线,但出于审美原因,请谨慎使用。连字符和破折号不起作用。
没有空间
Hashtags 不支持空格。因此,如果您使用两个词,请跳过空格。例如,关注美国大选的主题标签被标记为#USelection,而不是 $USelection。
无特殊字符
Hashtags 仅适用于 # 符号。特殊字符,如“!、$、%、^、&、*、+、.” 不管用。Twitter 识别井号,然后将主题标签转换为可点击的链接。
HashTags 可以以数字开头
标签可以是任何语言
标签可以是表情符号或符号
我想出了这样的想法,但它不包括最后两个条件:
const subStr = postText.split(/(?=[\s:#,+/][a-zA-Z\d]+)(#+\w{2,})/gm);
const result = _.filter(subStr, word => word.startsWith('#')).map(hashTag => hashTag.substr(1)) || [];
编辑:
示例:如果我有:
const postText = "#hello12#123 #hi #£hihi #This is # #Hyvääpäivää #Dzieńdobry #जलवायुपरिवर्तन an #example of some text with #hash-tags - http://www.example.com/#anchor but dont want the link,#hashtag1,hi #123 hfg skjdf kjsdhf jsdhf kjhsdf kjhsdf khdsf kjhsdf kjhdsf hjjhjhf kjhsdjhd kjhsdfkjhsd #lasthashtag";
结果应该是:
["hello12", "123", "hi", "This", "", "Hyvääpäivää", "Dzieńdobry", "जलवायुपरिवर्तन", "example", "hash", "anchor", "hashtag1", "123", "lasthashtag"]
我现在拥有的:
["hello12", "123", "hi", "This", "Hyv", "Dzie", "example", "hash", "anchor", "hashtag1", "123", "lasthashtag"]
注意:我不想使用 JavaScript 库。
谢谢
解决方案
假设主题标签中不允许的字符是!$%^&*+.
(您提到的那些)和,
(基于您的示例),您可以使用以下正则表达式模式:
/#[^\s!$%^&*+.,#]+/gm
注意:要排除更多字符,您可以像我上面那样将它们添加到字符类中。显然,您不能仅仅因为您想支持其他 Unicode 符号和表情符号而依赖字母数字字符。
JavaScript 代码示例:
const regex = /#[^\s!$%^&*+.,#]+/gm;
const str = "#hello12#123 #hi #£hihi #This is # #Hyvääpäivää #Dzieńdobry #जलवायुपरिवर्तन an #example of some text with #hash-tags - http://www.example.com/#anchor but dont want the link,#hashtag1,hi #123 hfg skjdf kjsdhf jsdhf kjhsdf kjhsdf khdsf kjhsdf kjhdsf hjjhjhf kjhsdjhd kjhsdfkjhsd #lasthashtag";
let m;
while ((m = regex.exec(str)) !== null) {
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
m.forEach((match) => {
console.log("Found match: " + match);
});
}
推荐阅读
- mysql - 使用节点后端路由反应视图
- amazon-cloudwatch - AWS CloudWatch - 监控每个 CPU 的 CPU 利用率
- javascript - 将数据形成json格式
- c# - 如何从 IdentityServer4 请求用户信息
- python - multiprocessing_generator 模块触发权限错误
- javascript - 拖放 - 如何在 dragstart 事件和 drop 事件中获取实际的 html
- amazon-web-services - 无法在私有子网 VPC VPN 中远程登录 AWS-EC2 实例
- c++ - 如何在 C++ 中获取 Google OAuth2 访问令牌?
- digital-ocean - 如何修复在 Ubuntu 上尝试将其作为服务启动时仍处于“激活”状态的 Tomcat
- django - Django 的排除和操作条件