Javascript替换正则表达式不按预期工作?

时间:2011-10-13 23:09:56

标签: javascript

我有以下例程来替换名为“SalesWeek”的下拉列表选项中显示的日期时间字符串的Time部分。 Replace方法不替换正则表达式预期匹配的字符串部分。

当以下例程在浏览器(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()来获取初始值,可能会在控制台中找不到任何一个字符...但它似乎没有什么区别。

我在以下链接中测试了正则表达式以便在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时需要“/”。也许我对此错了,还有另外一种方法,但是如果我试图创建的表达式不是那样封闭的话,我似乎在firebug中出错了。

我似乎总能在Stack Overflow上找到我遇到的大多数问题的答案......但是我很茫然...所以,我很谦卑地成为那个问这个问题的人时间...非常感谢任何帮助...

1 个答案:

答案 0 :(得分:7)

您没有分配结果。

item = item.replace(regex,'');