Telegram Bot API 4.5 MarkdownV2 上的转义字符给超链接带来麻烦

2024-01-09

电报机器人 API 4.5带有新的解析模式 MarkdownV2。同时这些_ * [ ] ( ) ~ > # + - = | { } . !字符必须与前面的字符一起转义\.

.replace(/[-.+?^$[\](){}\\]/g, '\\$&')用作添加转义字符的解决方案,效果非常好,但不幸的是,该解决方案确实影响超链接方法[inline URL](http://www.example.com/)因为它取代了\[inline URL\]\(http://www.example\.com/\)

Solution

bot.on('text', (ctx) => {
  const { chat } = ctx.message;
  const msgs = `Here is the [rules](https://telegra.ph/rules-05-06) Please read carefully and give the details which mentioned below.
*Name:*
*Place:*
*Education:*
*Experience:*
You can also call me on (01234567890)
__For premium service please contact with admin__`;

  const msgmsgWithEscape = msgs.replace(/[-.+?^$[\](){}\\]/g, '\\$&')

  ctx.telegram.sendMessage(
    chat.id,
    msgmsgWithEscape,
    {
      parse_mode: 'MarkdownV2',
    }
  )
});

Result


避免转义链接格式如下[...](http...)您可以将它们匹配并捕获到一个组中,然后匹配所有字符以在其他上下文中转义。然后,检查 Group 1 值,如果它不为空,则替换为 Group 1 值,否则替换为转义字符:

const msgs = `Here is the [rules](https://telegra.ph/rules-05-06) Please read carefully and give the details which mentioned below.
*Name:*
*Place:*
*Education:*
*Experience:*
You can also call me on (01234567890)
__For premium service please contact with admin__`;

const msgmsgWithEscape = msgs.replace(/(\[[^\][]*]\(http[^()]*\))|[_*[\]()~>#+=|{}.!-]/gi,
    (x,y) => y ? y : '\\' + x)

console.log(msgmsgWithEscape);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Telegram Bot API 4.5 MarkdownV2 上的转义字符给超链接带来麻烦 的相关文章

  • java中删除字符串中的特殊字符?

    如何删除字符串中除 之外的特殊字符 现在我用 replaceAll w s 它删除了所有特殊字符 但我想保留 谁能告诉我我该怎么办 Use replaceAll w s 我所做的是将下划线和连字符添加到正则表达式中 我添加了一个 连字符之前
  • 将带有星号的注册表项传递给测试路径

    我想通过以下方式运行此注册表路径Test Path在 PowerShell 中 但它包含一个星号 该星号在注册表中有效 但在 Windows 路径中无效 问题是 当我通过它时 Test Path将星号视为通配符 因此这需要非常非常长的时间
  • 如何使用正则表达式在 Java 中检查确切的电话号码

    你好 我是正则表达式的新手 我不知道我在做什么 这就是我寻求帮助的原因 我有以下电话号码 359878123456 我需要检查该电话号码是否符合条件 359 是准确的扩展名 第二个 2 个数字是操作员号码和以下 3 个数字之一 87 88
  • [A-z0-9]+ 正则表达式匹配方括号[重复]

    这个问题在这里已经有答案了 我正在努力解决以下正则表达式 A z0 9 如果针对此字符串进行测试 a919238 a asd 它返回a919238 包括方括号 我尝试输入我在 regex101 上的测试用例 https www regex1
  • 检测两个正则表达式是否可能匹配相同的字符串[重复]

    这个问题在这里已经有答案了 给定两个正则表达式 是否可以检测是否存在与它们都匹配的可能字符串 例如 给定正则表达式A and 我可以看到那个字符串 A 匹配他们两个 这是一个简单的案例 我的问题是针对更广泛的情况 给定任何两个有效的正则表达
  • 从字符串中获取数字

    我有一个字符串 例如 lorem 110 ipusm 我想获取 110 我已经尝试过这个 preg match all 0 9 string ret 但这正在返回 Array 0 gt 1 1 gt 1 2 gt 0 我想要这样的东西 Ar
  • 使用 Ruby 的“open-uri”打开 utf-8 URI 时遇到问题

    我正在尝试使用 ruby 和 open uri 从谷歌地图网络服务 API 获取丹麦位置地址 试图得到丹麦艾勒 http maps googleapis com maps api geocode json address r sensor
  • 如何让 Vim 突出显示非 ascii 字符?

    我试图让 Vim 突出显示非 ASCII 字符 是否有可用的设置 正则表达式搜索模式或插件来执行此操作 在 a 中使用范围 搜索中的字符类 您应该能够excludeASCII 十六进制字符范围 因此突出显示 假设您有hlsearch启用 所
  • 在elasticsearch中转义特殊字符

    我正在使用Elasticsearch python 客户端 https elasticsearch py readthedocs io en master 对我们托管的 elasticsearch 实例进行一些查询 我注意到一些字符需要转义
  • RegularExpressionValidator 限制输入长度而不限制字符类型

    我正在尝试使用RegularExpressionValidator验证一个TextBox输入长度 我可以使用它 但它只接受字母和数字 我想允许any个字符 唯一的检查是不超过 25 个字符
  • Emacs 正则表达式:什么 \< 和 \> 可以做 \b 不能做的事情?

    正则表达式反斜杠 GNU Emacs 手册 http www gnu org software emacs manual html node emacs Regexp Backslash html说 lt 匹配单词的开头 gt 匹配单词末尾
  • 当找到匹配时使用 sed 替换行首

    我有一个 Java 文件 我想注释包含匹配的任何代码行 myvar 我认为 sed 应该在这里帮助我 sed s myVar not sure what to put here g MyFile java 我不知道要输入什么 not sur
  • 根据列中的部分字符串匹配选择数据框行

    我想根据列中字符串的部分匹配从数据框中选择行 例如列 x 包含字符串 hsa 使用sqldf if它有一个like语法 我会做类似的事情 select from lt gt where x like hsa 很遗憾 sqldf不支持该语法
  • 两个分隔符之间的字符

    尝试将正则表达式放在一起 返回 和 之间的字符串 其中 是字符串的结尾 input abc def ghi 期望的正则表达式结果 def ghi 我已经尝试了很多这样的组合 1 任何帮助表示赞赏 注意 上面的正则表达式返回 abc def
  • Unicode、正则表达式和 PyPy

    我写了一个程序来添加 有限 统一码支持 https stackoverflow com q 1832893 520779到 Python 正则表达式 虽然它在 CPython 2 5 2 上工作正常 但在 PyPy 上不起作用 1 5 0
  • [\b] 退格正则表达式有什么用?

    b 显然匹配退格字符 我无法理解字符串如何包含退格字符 有人能给我一个具体的例子来说明如何使用它吗 非常感谢 虽然所有其他人总体上都是正确的 即 b是单词边界 b does表示字符类中的退格键 b 这确实会匹配退格字符 它只是一个可以出现在
  • 使用正则表达式定位响铃字符

    我注意到 Bell 有一个正则表达式字符 我却无法匹配 我读到了这个角色的内容维基百科 http en wikipedia org wiki Bell character 但我不明白如何在正则表达式中找到它
  • 正则表达式在 R 中同时多次包含字母/特殊字符时删除单词

    我想删除那些单词中字母 特殊字符的数量同时出现两次以上的单词 例如 输入就像 Google in theee lland of whhhat c c and e 输出应该是 Google in lland of c c and x lt G
  • Zend RegEx Validator 的自定义有意义的错误消息

    我正在验证表单中的文本字段 如下所示 name new Zend Form Element Text name name gt setLabel First Name gt setRequired true gt addFilter new
  • 只保留 A-Z 0-9 并使用 javascript 从字符串中删除其他字符

    我正在尝试验证字符串以使它们成为有效的网址 我只需要保留 A Z 0 9 并使用以下命令从字符串中删除其他字符javascript or jquery 例如 贝儿餐厅 我需要将其转换为 百丽餐厅 所以字符被删除 只保留 A Z a z 0

随机推荐

  • 如何在 Windows 上使用 GCC 11.1 构建 Qt 5.13.2?

    我已经使用 GCC MinGW w64 在 Windows 上成功构建 Qt 5 很长时间了 当我在 GCC 11 1 上尝试相同的操作时 构建失败并出现奇怪的错误消息 我该怎么做才能让它发挥作用 我自己使用以下方法构建了编译器develo
  • 是否可以在不进行额外分配的情况下移动和修改向量?

    考虑以下代码 let u Vec
  • 文件恢复软件如何工作?

    我想做一些简单的文件恢复软件 我想尝试恢复通过按 Shift Delete 删除的文件 我在 Windows 中工作 任何人都可以向我展示任何可以帮助我以编程方式执行此操作的链接或文档吗 我了解 C C NET 有什么指点吗 据我所知 文件
  • Python Poetry 的依赖版本语法

    The Poetry https github com sdispater poetry项目是Python的依赖管理系统 它使用新的pyproject toml https www python org dev peps pep 0518
  • 从 CloudKit 获取 CKAsset 图像非常慢

    我使用 CloudKit 作为我的 iOS 应用程序的服务器后端 我用它来容纳一些相对静态的数据以及一些图像 CKAsset 当我需要从公共数据库中实际获取这些资产时 我遇到了问题 它们的加载速度极其缓慢 我的用例是将图像加载到集合视图内的
  • 如何从 std::thread 更改 GUI?

    首先 我尝试使用setVisible from thread 有一个事件 void MainWindow OnShow Start OnShow actions ui gt LoadingBox gt setVisible true std
  • 如何让 Observable 返回转换后的项目数组 (Rxjs)

    我有一个生成 json 产品列表的端点 我在产品代码中定义了一个自定义类类型 我试图从端点获取数据 并将产品的 json 数组转换为 Product 类的数组 示例 API json 根据我的实际数据简化 products id 1 nam
  • 多次打开和关闭 php 标签会增加页面负载吗? [复制]

    这个问题在这里已经有答案了 可能的重复 开始 结束标签和性能 https stackoverflow com questions 2437144 opening closing tags performance 这是一个新手问题 但我在网上
  • Python `in` 与 `__contains__` 的功能

    我实施了 contains 前几天第一次在课堂上使用该方法 但其行为并不符合我的预期 我怀疑其中有一些微妙之处in https docs python org 2 library operator html我不明白的运算符 我希望有人能启发
  • 通过静态构造函数创建 ALV 时的 NULL 对象引用。为什么?

    我正在尝试运行从教程复制的这个程序 但我在这一行得到 Null 异常 CALL METHOD list gt SET TABLE FOR FIRST DISPLAY 我的理解是列表对象应该在类构造函数中创建 Method CLASS CON
  • Postman 获取环境名称作为变量

    我想知道是否可以将环境名称作为 Postman 中的环境变量 目前 我正在每个环境的环境变量中手动设置它 但它可以从某种应用程序变量中检索 这会很棒 我在文档中找不到任何内容 这应该为您提供当前选择的环境的名称 pm environment
  • PHP 中的 DOM 文档

    我刚刚开始阅读有关 DOM 的文档和示例 以便抓取和解析文档 例如 我的部分文档如下所示 div table tr td Crap td tr tr td width 172 valign top a href link img heigh
  • 为什么 PEP-8 指定最大行长度为 79 个字符? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将参数传递到 ASP .NET 页面

    我最近开始使用 ASP NET 但我对其他 NET 框架非常熟悉 我正在开发的应用程序需要将字符串索引作为命令行样式参数 现在 在我的 Page 类中 我有一个 const 字符串 我将其用作占位符 所以我的问题是两个人 1 如何设置应用程
  • 不使用 Visual Studio 创建 Windows 服务

    因此 使用 Visual Studio 创建 Windows 服务相当简单 我的问题更深入一些 即什么实际上使可执行文件可作为服务安装以及如何将服务编写为直接的 C 应用程序 我找不到很多关于此的参考资料 但我假设必须有一些我可以实现的接口
  • 使用Vite构建的React组件库会生成一大堆style.css,如何拆分它或注入样式?

    我目前正在重写组件库的构建步骤以使用 Vite 我遇到了有关样式的问题 它们没有被拆分 而是捆绑到一个大的 style css 文件中 这给我带来了两个问题 当我将包安装到另一个项目中时 它不会自动包含在内 如果我导入一个组件 style
  • 如何通知 select() 立即返回?

    我有一个工作线程正在侦听 TCP 套接字以获取传入流量 并缓冲接收到的数据以供主线程访问 我们将此套接字称为A 但是 即使没有数据传入 工作线程也必须执行一些常规操作 例如每秒一次 因此 我使用select 超时 这样我就不需要继续轮询 请
  • 我应该如何处理 Dispose() 方法中的异常?

    我想提供一个类来管理临时目录的创建和后续删除 理想情况下 我希望它可以在 using 块中使用 以确保无论我们如何离开该块 目录都会被再次删除 static void DoSomethingThatNeedsATemporaryDirect
  • 通过 MIME 将多个文件附加到 Lotus Domino 中的文档

    在我们的企业应用程序中 我们需要将文件附加到文档中 我们将文件名和文件内容存储在字节数组中 我找到了一个使用 MIME 将文件附加到文档的解决方案 final MIMEEntity body document createMIMEEntit
  • Telegram Bot API 4.5 MarkdownV2 上的转义字符给超链接带来麻烦

    电报机器人 API 4 5带有新的解析模式 MarkdownV2 同时这些 gt 字符必须与前面的字符一起转义 replace g 用作添加转义字符的解决方案 效果非常好 但不幸的是 该解决方案确实影响超链接方法 inline URL ht