1

我有一个包含文本的变量数组。我只想选择包含分秒标记的项目,例如。“3:00”、“4:01”、“0:23”。我了解如何通过数组,我只需要知道如何实现这个 regex

为了安全起见,这里是:

^(([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 国际足联 12 评论员?”
  2. “呜呜呜<3”

编辑2:

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

您将希望使用本机过滤器函数来过滤数组(链接中的旧浏览器有一个 shim)而不是each,您可以使用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])本质上标识时间字符串的分钟部分,因为分钟只能从0(或00)到59,这将搜索单个数字 from0-5后跟 a 0-9
  • |表示一个“或”,它将识别前面的两位数序列 from 00to59或后续序列。
  • [0-9]同样,这标识了 的范围0-9,因此标识了个位数的分钟数。
  • \:因为冒号是正则表达式中的特殊字符,所以反斜杠会转义冒号,并允许搜索文字:字符。
  • [0-9]{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 回答