AngularJS过滤器删除某个正则表达式

时间:2015-11-07 14:44:11

标签: javascript angularjs regex

我正在尝试创建一个angularJS过滤器,它将删除如下所示的时间戳:(##:##:##)或##:##:##。

这是一个删除所有字母的过滤器:

.filter('noLetter', function()  {
//this filter removes all letters
        return function removeLetters(string){
        return string.replace(/[^0-9]+/g, " ");
        }
        })

这是我尝试制作一个删除时间戳的过滤器,但它不起作用,非常感谢帮助。

.filter('noStamps', function () {
  return function removeStamps(item) {
  return item.replace(/^\([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\)$/i, "");
 }
})

我的目标是删除它找到的时间戳,不留任何代替。

根据评论中的问题进行修改: 时间戳在文本中,所以它会说“这是我21:20:20试图做21:20:22的21:20:19的例子”

我希望通过过滤器将其转换为“这是我尝试做的一个例子”。

1 个答案:

答案 0 :(得分:1)

您可以使用

/\s*\(?\b\d{2}:\d{2}:\d{2}\b\)?/g

请参阅regex demo

主要观点:

  • 应删除^(字符串的开头)和$(字符串的结尾)锚点,以便表达式变为非锚定,并且可以部分匹配输入文本。
  • 匹配所有匹配项的全局标记
  • 限制量词{2}以缩短正则表达式(以及使用速记类\d也有助于缩短它)
  • \)?\(??量词一起使用,以匹配圆括号的1或0次出现。
  • \s*在开头“修剪”结果(因为前导空格是匹配的)。

JS片段:

 
var str = 'this is an example (21:20:19) of what I am 21:20:20 trying to do 21:20:22';
var result = str.replace(/\s*\(?\b\d{2}:\d{2}:\d{2}\b\)?/g, '');
document.getElementById("r").innerHTML = result;
<div id="r"/>