JS Regex - 替换markdown链接的内容

时间:2015-09-03 17:12:35

标签: javascript regex

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

我想要得到这个:

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

2 个答案:

答案 0 :(得分:2)

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

/(\[(.*?)\]\()(.+?)(\))/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](

  1. 您可以将您的javascript更改为console.log(md.replace(/(\[.*?\]\()(.+?)(\))/g, '$2'))
  2. 重写你的正则表达式以删除捕获括号的括号,以便你只捕获它们内部的内容。 \[(.*?)\]\((.+?)\)
  3. 如果您是正则表达式的新手,我强烈推荐使用regex101.com之类的正则表达式工具来查看您的群组是什么以及您的正则表达式究竟在做什么。

    继承你为我救的正念我 https://regex101.com/r/tZ6yK9/1

答案 1 :(得分:1)

使用此RegExp:

/\[([^\]]+)\][^\)]+\)/g

如果你打电话给这个

'and so use [chalk](#api).red(string[, options])'.replace(/\[([^\]]+)\][^\)]+\)/g, '$1')

它返回此

  

“所以使用chalk.red(string [,options])”