我正在尝试创建一个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的例子”
我希望通过过滤器将其转换为“这是我尝试做的一个例子”。
答案 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"/>