我几乎想出了一个正则表达式的问题,只是一件小事。
我想得到这个: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](
。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/