我几乎想出了一个正则表达式的问题,只是一件小事。

我想得到这个:
and so use [chalk](#api).red(string[, options])
进入这个:
and so use chalk.red(string[, options])
我有这个:

var md = 'and so use chalk.red(string[, options])';
console.log(md.replace(/(\[.*?\]\()(.+?)(\))/g, '$1'))

这与 [x](y) 完美匹配。但是, $1 返回 [chalk]( 。我希望它返回 chalk,而我对如何做到这一点感到困惑。

我可能(?)已经想通了:

这在所有情况下都有效吗?
/(\[(.*?)\]\()(.+?)(\))/g

最佳答案

让我们来看看你当前的正则表达式做了什么

/(\[(.*?)\]\()(.+?)(\))/g
1st Capturing group (\[(.*?)\]\()
    \[ matches the character [ literally
    2nd Capturing group (.*?)
        .*? matches any character (except newline)
            Quantifier: *? Between zero and unlimited times, as few times as possible, expanding as needed [lazy]
    \] matches the character ] literally
    \( matches the character ( literally
3rd Capturing group (.+?)
    .+? matches any character (except newline)
        Quantifier: +? Between one and unlimited times, as few times as possible, expanding as needed [lazy]
4th Capturing group (\))
    \) matches the character ) literally

如您所见,您的第一个捕获组包含您的第二个捕获组。第二个捕获组是 chalk ,你的第一个是 [chalk](
  • 你可以改变你的 javascript 来读取 console.log(md.replace(/(\[.*?\]\()(.+?)(\))/g, '$2'))
  • 重写您的正则表达式以删除捕获括号的括号,以便您仅捕获其中的内容。 \[(.*?)\]\((.+?)\)

  • 如果您不熟悉正则表达式,我强烈建议您使用正则表达式工具,例如 regex101.com 来查看您的组是什么以及您的正则表达式究竟在做什么。

    这是我为你保存的正则表达式
    https://regex101.com/r/tZ6yK9/1

    关于javascript - JS Regex - 替换 markdown 链接的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32381742/

    10-12 15:11