2013-02-12 117 views
1

我一直在试图让其中包含AA串的核查LRC文件 http://en.wikipedia.org/wiki/LRC_%28file_format%29验证用正则表达式在JavaScript

,并想通过正则表达式LRC文件,验证文件的格式,其正确与否。 这将是有效的,不仅仅是以[mm:ss.xx]开头的行,而且也是[mm:ss],因为它将默认为xx = 00

所以,如果文件其更正与否,包括 也可能出现在文件中的ID标签。

在此先感谢

+0

它怎么会验证这个正则表达式, 它会是这样的问题:\ [?[\ S \ S * \]这个时候它给出成为[]之间的信息,但它不足以适用于所有行和其他条件 – 2013-02-12 12:07:36

回答

0

我猜你会需要遍历文件中的每一行,并测试对正则表达式来检查它的语法匹配。如果正则表达式失败,那么显然你会返回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 }; 
} 
+0

谢谢它真的有帮助!这正是我正在寻找的! 我只是调整了一点正则表达式来更好地验证它是这样的:var lyricregex = \ [([0-9] {1} | [0-9] {2})\:[0-9] {2 }(\。[0-9] {2})?\]([\ w:\ s] +)' 'tag_regex =(\ [((ar)|(a)|(al)|(ti )|(AU)|(由))\:(+)\] | \ [(长度):([0-9]。{1} | [0-9] {2})\:[0-9 ] {2} \] | \ [(偏移):([ - 0-9] *)\])' – 2013-02-12 12:38:50