JavaScript正则表达式以捕获[box]

时间:2018-09-17 19:54:35

标签: javascript regex

因此,我正在使用城市词典api,并且它们的术语可以与api一起使用[term]链接到其他人,您会得到我认为使它们实际上在markdown中超链接的框,即term,因此我尝试制作一个替换正则表达式可以做到这一点,到目前为止我做得很好,除了当框有多个单词(如[空格])不起作用时,我一直在努力寻找一个合适的正则表达式来匹配它,但是最终却匹配了整个字符串,这就是我使用的正则表达式效果很好,但没有空格

"example [string] with [some] boxes".replace(/(\[(\S+)\])/ig, "$1(https://www.urbandictionary.com/define.php?term=$2)");

1 个答案:

答案 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:除[]以外的任何一个或多个字符(请注意,[不必在字符类中转义,但]必须)
  • ]-一个]字符(请注意,不必对字符类]进行转义)。