1

LRCファイルを含む文字列の検証を取得しようとしています http://en.wikipedia.org/wiki/LRC_%28file_format%29

正規表現を使用して、ファイルの形式が正しいかどうかを確認します。[mm:ss.xx]で始まる行だけでなく、[mm:ss]も有効になります。これは、デフォルトでxx=00になるためです。

したがって、ファイルに表示される可能性のあるIDタグも含めて、ファイルが修正されているかどうかを返すという考えです。

前もって感謝します

4

1 に答える 1

0

ファイルのすべての行をループし、正規表現に対してテストして、構文と一致するかどうかを確認する必要があると思います。正規表現が失敗した場合は、明らかに戻りfalseます。適切な正規表現は、おそらく次のようなものです。

\[[0-9]{2}\:[0-9]{2}(\.[0-9]{2})?\]([\w:\s]+)

どちらが両方に一致します:

[00:29.02]Line 6 lyrics
[00:29]Line 6 lyrics

そして、歌詞を取得したい場合に備えて、2番目の一致するグループを提供します。

タグを照合するには、次の行に沿って正規表現が必要になる可能性があります。

\[([a-z]+)\:(.+)\]

どちらが一致します:

[au:Written by Kal Mann / Dave Appell, 1961]
[length: 2:23]

これは、タグ名に数字が含まれていないことを前提としていますが。タグ名と値の両方に対して2つのキャプチャグループを提供します。

あなたが望むことをするために、私はあなたが望む機能を示すと思う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 };
}
于 2013-02-12T12:11:07.443 に答える