Javascript replace регулярное выражение работает не так, как ожидалось?

#javascript

#javascript

Вопрос:

У меня есть следующая процедура для замены временной части строки даты и времени, отображаемой в параметрах выпадающего списка под названием «Неделя продаж». Метод 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. Возможно, я ошибаюсь в этом, и есть другой способ, но, похоже, я получаю ошибку в firebug, если выражение, которое я пытаюсь создать, не заключено таким образом.

Кажется, я всегда нахожу ответы, которые я ищу в Stack Overflow, на большинство проблем, с которыми я сталкиваюсь … но я нахожусь в loss…so , Я достаточно унижен, чтобы быть тем, кто задает вопрос на этот раз … Любая помощь очень ценится…

Комментарии:

1. (Если подумать, это лучше как комментарий) Что не так с этим регулярным выражением? var str = "12/31/2011 12:00:00 AM after: 12/31/2011"; str = str.match(/[^s] /)[0]; console.log(str);

2. Есть ли веская причина использовать регулярное выражение для этого? Похоже, что дата остановится на первом пробеле.

3. Привет, Дэйв … работаю над приложением MVC3 … возвращаю «Список выбора» из действия контроллера, назначенного переменной ViewBag, SalesWeekId. Отображение с помощью помощника Html… нужна короткая дата для отображения. Аннотация данных из модели не влияет на использование таким образом, не уверен, почему … использование аннотаций без проблем во всем приложении … немного поискал … ничего не нашел … пока все в порядке.

4. @djs Я просто говорю, что регулярное выражение кажется излишним, поскольку вы знаете формат, который получаете, и имеете согласованный разделитель.

Ответ №1:

Вы не присваиваете результат.

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