首页 > 解决方案 > 删除@ids 和文本包含来自电报机器人消息的链接

问题描述

我有一个电报机器人,我想从文本中删除所有链接,但是在这里,我有两个问题:

1.我不知道如何像这样删除所有 Id:@id 使用我的代码中的当前正则表达式

2.我也想删除所有有链接的字符串(在电报中添加文本链接,选择文本并右键单击>格式化>创建链接,然后你的文本颜色会变成蓝色,你的文本将变成一个链接)

所以这是我当前的代码并从输入中删除链接:

bot.on("text", async function (msg){
  const text = msg.text.replace(
    /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/g,
    ""
  );

  console.log(text);
})

bot.start();

但我想删除 ids(@ 之后的所有内容)并且文本包含链接

我也使用TeleBot来使用电报机器人

标签: javascriptregex

解决方案


您可以使用|匹配 @ 后跟除 @ 或空格字符之外的任何字符的替换添加到您的模式|\B@[^\s@]+

请注意,仅对于匹配项,您可以将第一部分的外部捕获组转换为非捕获组,因为您仅将匹配项替换为空字符串。

\b(?:(?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))|\B@[^\s@]+

查看正则表达式演示


推荐阅读