[英]validate with Regex for LRC file in javascript
我一直在尝试验证包含LRC文件的字符串String http://en.wikipedia.org/wiki/LRC_%28file_format%29
并想通过正则表达式验证文件格式是否正确。 这将是有效的,不仅是以[mm:ss.xx]开头的行,而且是有效的[mm:ss],因为它将默认为xx = 00
因此,想法是如果文件已更正,则返回该文件,包括可能出现在文件中的ID标签。
提前致谢
我猜您将需要遍历文件中的每一行,并针对正则表达式进行测试以检查其是否与语法匹配。 如果正则表达式失败,那么您显然会返回false
。 合适的正则表达式可能类似于:
\[[0-9]{2}\:[0-9]{2}(\.[0-9]{2})?\]([\w:\s]+)
两者都将匹配:
[00:29.02]Line 6 lyrics
[00:29]Line 6 lyrics
并为您提供第二个匹配组,以备您想获取歌词时使用。
为了匹配标签,您可能需要以下正则表达式:
\[([a-z]+)\:(.+)\]
哪个将匹配:
[au:Written by Kal Mann / Dave Appell, 1961]
[length: 2:23]
尽管这假定标签名称中没有数字。 它为标记名称和值提供了两个捕获组。
为了做您想做的事情 ,我创建了一个jsFiddle ,我认为它演示了您想要的功能。 假定LRC数据由\\n
字符分隔。 示例方法如下:
function test_LRC(str) {
var lyric_regex = /\[[0-9]{2}\:[0-9]{2}(\.[0-9]{2})?\](.+)/i;
var tag_regex = /\[([a-z]+)\:(.+)\]/i;
var LRC = str.split('\n');
var len = LRC.length;
var tags = [];
var valid = true;
for (var i = 0; i < len; i++) {
var line = LRC[i].trim();
if (line !== '') {
if (tag_regex.test(line)) {
var groups = tag_regex.exec(line);
tags.push({'tag': groups[1], 'value': groups[2].trim()});
} else if (!lyric_regex.test(line)) {
valid = false;
break;
}
}
}
return { 'valid': valid, 'tags': tags };
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.