2015-11-07 67 views
2

我试图做一个angularJS过滤器,它将删除看起来像这样的时间戳:(##:##:##)或##:##:##。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:19我是什么21:20:20试图做21:20:22 “

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

+0

取下锚和/或使括号可选?试试'\(?[0-9] [0-9]:[0-9] [0-9]:[0-9] [0-9] \)?'不需要我标记,也许使用g标志。 –

回答

1

您可以使用

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

regex demo

THRE要点:

  • ^(字符串的开始)和$锚(字符串的结束)应被删除,以便表达式变为未锚定,并且可以部分匹配输入文本。
  • 全局标志来匹配所有出现
  • 限制量词{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"/>