2011-10-13 109 views
2

我有以下例程來替換名爲「SalesWeek」的下拉列表的選項中顯示的日期時間字符串的時間部分。 Replace方法不會替換正則表達式預期匹配的字符串部分。JavaScript替換正則表達式不按預期工作?

當瀏覽器下面的程序運行(FF):

var select = $('#SalesWeek'); 
var item = ''; 

$.each($('#SalesWeek option'), function(){ 
    item = $(this).text(); 
    console.log('before: ' + item); 
    var regex = new RegExp(/(\s([0]\d|[1][0-2])(\:[0-5]\d){1,2})*\s*([aApP][mM]{0,2})/); 
    item.replace(regex,''); 
    console.log('after: ' + item); 
    $(this).html(item); 
}); 

被打印到控制檯以下:

before: 12/31/2011 12:00:00 AM 
after: 12/31/2011 12:00:00 AM 

但我很期待:

before: 12/31/2011 12:00:00 AM 
after: 12/31/2011 

我試過使用$(this).html()和$(this).text()來獲得初始值思想也許有字符我是ju在任何情況下都不會在控制檯中看到......但它似乎沒有什麼區別。

我測試過的正則表達式通過以下鏈接在JavaScript中使用: http://www.regxlib.com/RETester.aspx

使用JavaScript引擎

Test Expression: (\s([0]\d|[1][0-2])(\:[0-5]\d){1,2})*\s*([aApP][mM]{0,2}) 
Input Value: 12/3/2011 12:00:00 AM 
Expected Match: 12:00:00 AM 

看起來沒有問題的工作。請注意,我在測試時剝掉了表達式中的前導「/」和尾部「/」,但我相信在JavaScript中創建新的RegExp時,必須使用「/」。也許我錯了,還有另一種方式,但是如果我試圖創建的表達式不是以這種方式包含的話,我似乎在螢火蟲中發生錯誤。

我總是在Stack Overflow上尋找我遇到的大多數問題的答案......但我很茫然......所以,我很謙虛地成爲問這個問題的人這次...任何幫助非常感謝...

+1

(來想一想,這是更好的評論)這個正則表達式有什麼問題? 'var str =「12/31/2011 12:00:00 AM after:12/31/2011」; str = str.match(/ [^ \ s] + /)[0]; console.log(str);' –

+0

是否有令人信服的理由使用正則表達式呢?似乎日期會停留在第一個空間。 –

+0

嗨Dave ...在MVC3應用程序上工作...從分配給ViewBag變量SalesWeekId的控制器操作中返回「SelectList」。通過Html幫手顯示...需要顯示一個短日期。模型中的數據註釋沒有以這種方式使用影響,不知道爲什麼...在整個應用程序中使用註釋沒有問題...搜索了一下...沒有找到任何東西......現在看起來確實沒問題。 – djs

回答

7

你沒有分配結果。

item = item.replace(regex,''); 
相關問題