You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用JavaScript正则表达式更新匹配的标题行以适配Telegram Markdown格式?

如何用JavaScript正则表达式更新匹配的标题行以适配Telegram Markdown格式?

嘿,我来帮你搞定这个问题!你的正则现在会匹配所有行,主要是两个小细节没处理对,咱们一步步修正:

你的原正则问题出在哪?

你写的/#*(.*)\n\n/g有两个关键问题:

  1. #*表示0个或多个#,这意味着哪怕一行开头没有#,只要后面跟着\n\n,也会被匹配到——这就是为什么所有行都被修改了
  2. 没有限定#必须出现在行的开头,虽然你的文本里没有行中间带#的情况,但这会导致正则逻辑不严谨,万一以后出现就会出错

修正后的正则方案

我们需要调整正则,确保只匹配**行首带一个或多个#**的行,同时去掉这些#,再套上Telegram需要的__**__格式:

var t = "### Context Analyse\n\nHere comes the analyse...\n\nAnd it continues here.\n\n### And here is another title\n\n";
t = t.replace(/^#+(.*?)\n\n/gm, "__*$1*__\n\n");
console.log(t);

拆解修正后的正则逻辑

我给你解释下每个部分的作用:

  • ^:匹配行的开头,确保我们只处理以#开头的行(多行模式下才生效)
  • #+:匹配一个或多个#(标题至少有一个#,用+而不是*就不会匹配0个#的情况)
  • (.*?):非贪婪匹配标题的内容,避免把多余的字符包含进来
  • \n\n:匹配标题后面的两个换行(和你原格式的标题后空行对应)
  • gm:全局模式(g)+ 多行模式(m),多行模式让^能识别每一行的开头,而不是整个字符串的开头

运行后的正确结果

执行上面的代码后,输出会变成:

__*Context Analyse*__

Here comes the analyse...

And it continues here.

__*And here is another title*__

你看,只有原来带#的标题行被修改了,普通内容行完全不受影响,完美符合你的需求!

备注:内容来源于stack exchange,提问作者Tuckbros

火山引擎 最新活动