我正在为JavaScript创建.LRC文件解析器,我遇到了麻烦.我有以下代码:
var getTimecodes = new RegExp("\[[0-9]{2}:[0-9]{2}\.[0-9]{2}\]", "g");
var testLine = "[00:25.03][00:38.86][03:36.98][03:50.64]but man you should've seen him";
var timecodes = testLine.match(getTimecodes);
var lineText = testLine.replace(getTimecodes, "");
console.log(timecodes);
console.log(lineText);
Run Code Online (Sandbox Code Playgroud)
根据我对RegEx和几个不同的RegEx测试站点的理解,包括一个完全用JavaScript编写的站点,我应该得到以下结果:
["[00:25.03]","[00:38.86]","[03:36.98]","[03:50.64]"]
但男人你应该见过他
相反,我得到以下输出:
["00:25.03]","00:38.86"","03:36.98]","03:50.64]"]
[[[[但是你应该见过他的男人
有人可以对此有所了解吗?我可能做了一些愚蠢的事情,但我无法弄清楚它是什么......
谢谢,YM
\\在RegExp构造函数中使用double :
var getTimecodes = new RegExp("\\[[0-9]{2}:[0-9]{2}\\.[0-9]{2}\\]", "g");
Run Code Online (Sandbox Code Playgroud)
或简单地说:
var getTimecodes = /\[[0-9]{2}:[0-9]{2}\.[0-9]{2}\]/g;
Run Code Online (Sandbox Code Playgroud)
原因:因为RegExp constructor需要一个String因此String需要一个转义和正则表达式引擎需要第二次转义.