2013-02-12 119 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