1

すべてテキストを含む変数の配列があります。分秒マーカーを含むアイテムのみを選択したい。「3:00」、「4:01」、「0:23」。配列を処理する方法を理解しています。この正規表現を実装する方法を知る必要があるだけです。

念のため、以下に示します。

^(([0-9])|([0-1][0-9])|([2][0-3])):(([0-9])|([0-5][0-9]))$

私はこれを実装しようとしています:

$.each(comments, function(i, val) { //Go through array with jQuery
    //Remove from array if instance of "minute:second" is not found
});

ありがとう!

編集:

Dave Thomas が例を要求しました。それらはすべて YouTube のコメントです。分:時刻を含むコメントと含まないコメントの例を以下に示します。すべてサンプルビデオからの抜粋です。

  1. 「1:00 Fifa 12 コメンテーター?」
  2. 「ROOOOOOOONEY <3」

EDIT2:

for (var i = 0, len = comments.length; i < len; i++) {
    if(!(comments[i].test(/(([0-5][0-9])|[0-9])\:[0-9]{2,2}/))){
        comments.splice(i,1);
    }
}​
4

2 に答える 2

4

eachの代わりに、配列を調整するためにネイティブのfilter関数を使用することをお勧めします (リンクに古いブラウザー用の shim があります) 。 test を使用して、文字列に対して正規表現をテストできます

var pattern = /(([0-9])|([0-1][0-9])|([2][0-3])):(([0-9])|([0-5][0-9]))/;
comments = comments.filter(function(str){
    return pattern.test(str);
});
于 2012-06-11T03:09:51.357 に答える
2

よりネイティブな JavaScript アプローチを気にしない場合は、次のことをお勧めします。

var comments = ["01:00 Fifa 12 comentator?", "ROOOOOOOONEY <3"];

for (var i = 0, len = comments.length; i < len; i++) {
    return comments[i].test(/(([0-5][0-9])|[0-9])\:[0-9]{2,2}/);
}​

JS フィドルのデモ

正規表現の説明:

(([0-5][0-9])|[0-9])\:[0-9]{2,2}
  • ([0-5][0-9])基本的に、時間文字列の分部分を識別します。分は from 0(または00) toのみであるという理由で、これは .が続く591 桁の from を検索します。0-50-9
  • |00は「or」を示し、 to59または後続のシーケンスから前の 2 桁のシーケンスを識別します。
  • [0-9]繰り返しますが、これは の範囲を識別する0-9ため、1 桁の分を識別します。
  • \:コロンは正規表現の特殊文字であるため、バックスラッシュはコロンをエスケープし、リテラル文字の検索を可能にします:
  • [0-9]{2,2}は、2 桁の文字シーケンスを検索します。それぞれの文字シーケンスは、 のシーケンスから取得されます0-9

上記のコードを更新するために編集:

var comments = [/*...rather a lot...*/]
    timelyComments = [];

for (var i = 0, len = comments.length; i < len; i++) {
    if (comments[i].test(/(([0-5][0-9])|[0-9])\:[0-9]{2,2}/)){
        timelyComments.push(comments[i]);
    }
}

console.log(timelyComments);​

JS フィドルのデモ

参考文献:

于 2012-06-11T03:21:41.163 に答える