因此,我正在使用城市词典api,并且它们的术语可以与api一起使用[term]链接到其他人,您会得到我认为使它们实际上在markdown中超链接的框,即term,因此我尝试制作一个替换正则表达式可以做到这一点,到目前为止我做得很好,除了当框有多个单词(如[空格])不起作用时,我一直在努力寻找一个合适的正则表达式来匹配它,但是最终却匹配了整个字符串,这就是我使用的正则表达式效果很好,但没有空格
"example [string] with [some] boxes".replace(/(\[(\S+)\])/ig, "$1(https://www.urbandictionary.com/define.php?term=$2)");
答案 0 :(得分:4)
您可以使用/(\[([^\][]+)])/g
正则表达式并替换为"$&(https://www.urbandictionary.com/define.php?term=$1)"
:
console.log(
"example [string] with [space words] boxes".replace(
/\[([^\][]+)]/g, "$&(https://www.urbandictionary.com/define.php?term=$1)")
);
如果空格应替换为+
,则可以使用
console.log(
"example [string] with [space words] boxes".replace(
/\[([^\][]+)]/g, (x,y) =>
x + "(https://www.urbandictionary.com/define.php?term=" + y.replace(/\s+/g, "+") + ")")
);
请注意,您不必将整个模式都包含在一个捕获组中,可以始终使用替换模式中的$&
占位符来访问整个匹配值。因此,建议的模式中只有一个(...)
。
模式详细信息
\[
-一个[
字符([^\][]+)
-捕获组1:除[
和]
以外的任何一个或多个字符(请注意,[
不必在字符类中转义,但]
必须)]
-一个]
字符(请注意,不必对字符类]
进行转义)。