想要通过VSCode去从:
<img src="/icons/sound2.gif" alt="[SND]"> <a href="e10d3a.mp3">e10d3a.mp3</a> 2015-09-23 09:10 9.3M <img src="/icons/sound2.gif" alt="[SND]"> <a href="e10d3b.mp3">e10d3b.mp3</a> 2015-09-23 09:10 7.0M <img src="/icons/sound2.gif" alt="[SND]"> <a href="e10d5a.mp3">e10d5a.mp3</a> 2015-09-23 09:11 54M ...
的内容中,提取出:
e10d3a.mp3
e10d3b.mp3
e10d5a.mp3
如图:
一是:用:
^<img src="/icons/sound2\.gif" alt="\[SND\]"> <a href="\w+\.mp3
没有匹配到mp3的部分
二是:替换后的内容,想要调用使用分组group中的mp3的字符串
类似于:
^<img src="/icons/sound2\.gif" alt="\[SND\]"> <a href="(\w+\.mp3) (1)
搜:
vscode 正则
如何使用vscode正则表达式批量替换递增的行标 – CRIMX的回答 – SegmentFault 思否
替换后用:
$N
去表示对应的group中的内容
vscode插件:正则表达式预览 | le0zh’s blog
vscode regex replace
visual studio code – VSCode regex find & replace submatch math? – Stack Overflow
Cannot reference regex group for find and replace in Search Panel · Issue #9586 · Microsoft/vscode
Cannot Prepend RegEx Match Group Replacement with a $ · Issue #28146 · Microsoft/vscode
去试试:
^[^\r\n]+href="(\w+\.mp3)"[^\r\n]+$ $1
是可以实现要的效果的,都换成了对应的xxx.mp3了:
另外,关于具体的语法的支持,从:
Basic Editing in Visual Studio Code
VS Code does support regular expression searches, however, backreferences, lookaround, and multiline matches are not supported. This is because VS Code depends on the search tool ripgrep, which, while extremely fast, doesn’t support these advanced regex features.
->
BurntSushi/ripgrep: ripgrep recursively searches directories for a regex pattern
->
里面有详细的介绍
另外,里面没有详细的解释说,replacement中用$N去引用匹配的第N个group
但是通过:
let re = Regex::new(r"(?P<y>\d{4})-(?P<m>\d{2})-(?P<d>\d{2})").unwrap(); let before = "2012-03-14, 2013-01-01 and 2014-07-05"; let after = re.replace_all(before, "$m/$d/$y"); assert_eq!(after, "03/14/2012, 01/01/2013 and 07/05/2014");
可以看出的确是这么用的
且对于named group来说,查找时正则中named group的写法,和Python类似也是:
(?P<yourGroupName>xxxx)
然后用:
$yourGroupName
去引用。
去试试
^[^\r\n]+href="(?P<audioFilename>\w+\.mp3)"[^\r\n]+$ $audioFilename
结果直接红色提醒,不支持这个语法-》没法使用namded group
但是看到:
https://docs.rs/regex/0.2.5/regex/#syntax
中有说:
(exp) numbered capture group (indexed by opening parenthesis)
(?Pexp) named (also numbered) capture group (allowed chars: [_0-9a-zA-Z])
看来VSCode中不支持?
但是支持:
(?:exp) non-capturing group
^[^\r\n]+href="(?:\w+\.mp3)"[^\r\n]+$
-》所以目前看来暂时只能使用numbered group了
用:
^[^\r\n]+href="(\w+\.mp3)"[^\r\n]+$ $1
把
<img src="/icons/sound2.gif" alt="[SND]"> <a href="e10d3a.mp3">e10d3a.mp3</a> 2015-09-23 09:10 9.3M <img src="/icons/sound2.gif" alt="[SND]"> <a href="e10d3b.mp3">e10d3b.mp3</a> 2015-09-23 09:10 7.0M <img src="/icons/sound2.gif" alt="[SND]"> <a href="e10d5a.mp3">e10d5a.mp3</a> 2015-09-23 09:11 54M ...
再去点击:
全部替换
替换为:
进一步的,其实此处是为了得到批量的mp3的下载地址,供后续迅雷去批量下载的
所以再去给替换后的mp3加上地址前缀:
http://media.talkbank.org/CHILDES/Biling/Singapore/
正则:
^[^\r\n]+href="(\w+\.mp3)"[^\r\n]+$ http://media.talkbank.org/CHILDES/Biling/Singapore/$1
把:
<img src="/icons/sound2.gif" alt="[SND]"> <a href="e10d3a.mp3">e10d3a.mp3</a> 2015-09-23 09:10 9.3M <img src="/icons/sound2.gif" alt="[SND]"> <a href="e10d3b.mp3">e10d3b.mp3</a> 2015-09-23 09:10 7.0M <img src="/icons/sound2.gif" alt="[SND]"> <a href="e10d5a.mp3">e10d5a.mp3</a> 2015-09-23 09:11 54M
替换为:
http://media.talkbank.org/CHILDES/Biling/Singapore/e10d3a.mp3
注意:
VSCode中的正则利用的是第三方的库:
BurntSushi/ripgrep: ripgrep recursively searches directories for a regex pattern
虽然其语法介绍中说是支持named capture group=命名的捕获的组=可以给组命名
比如:(?P<yourGroupName>xxx) -> $yourGroupName
但是实际上不支持,只能用numbered capture group=数组捕获的组
比如:(xxx) -> $1
然后就可以利用迅雷去批量下载mp3了: