2015-11-07 69 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"/>