首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中使用Regex for LRC文件进行验证

在javascript中使用Regex for LRC文件进行验证
EN

Stack Overflow用户
提问于 2013-02-12 19:28:53
回答 1查看 388关注 0票数 1

我一直在尝试获得一个包含LRC文件http://en.wikipedia.org/wiki/LRC_%28file_format%29的字符串的验证

并希望通过正则表达式,验证文件的格式是否正确。它将是有效的,不仅以mm:ss.xx开头的行有效,而且mm:ss也有效,因为默认情况下它将是xx=00

所以它的想法是返回文件是否被更正,包括可能出现在文件中的ID标签。

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-12 20:11:07

我猜您需要遍历文件中的每一行,并根据正则表达式对其进行测试,以检查它是否与语法匹配。如果正则表达式失败,那么您显然会返回false。适当的正则表达式可能类似于:

代码语言:javascript
复制
\[[0-9]{2}\:[0-9]{2}(\.[0-9]{2})?\]([\w:\s]+)

它将同时匹配以下两项:

代码语言:javascript
复制
[00:29.02]Line 6 lyrics
[00:29]Line 6 lyrics

并给你第二个匹配组,以防你想抢到歌词。

为了匹配标记,您可能需要一个如下所示的正则表达式:

代码语言:javascript
复制
\[([a-z]+)\:(.+)\]

将匹配以下内容:

代码语言:javascript
复制
[au:Written by Kal Mann / Dave Appell, 1961]
[length: 2:23]

虽然这假设在标记名称中没有数字。它为您提供了标记名称和值的两个捕获组。

为了做你想做的事情,我创建了一个jsFiddle,我认为它演示了你想要的功能。它假定LRC数据由\n字符分隔。示例方法如下:

代码语言:javascript
复制
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 };
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14831484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档