我一直在尝试获得一个包含LRC文件http://en.wikipedia.org/wiki/LRC_%28file_format%29的字符串的验证
并希望通过正则表达式,验证文件的格式是否正确。它将是有效的,不仅以mm:ss.xx开头的行有效,而且mm:ss也有效,因为默认情况下它将是xx=00
所以它的想法是返回文件是否被更正,包括可能出现在文件中的ID标签。
提前感谢
发布于 2013-02-12 20:11:07
我猜您需要遍历文件中的每一行,并根据正则表达式对其进行测试,以检查它是否与语法匹配。如果正则表达式失败,那么您显然会返回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 };
}https://stackoverflow.com/questions/14831484
复制相似问题