Что не так с моим регулярным выражением даты?
var dateRegex = /\/Date\((\d+)\)\//g; // [0-9] instead of \d does not help.
dateRegex.test("/Date(1286443710000)/"); // true
dateRegex.test("/Date(1286445750000)/"); // false
Как консольные консоли Chrome, так и Firefox. Что, черт возьми, ребята?
Изменить: еще более простой тестовый пример:
var dateRegex = /Date\(([0-9]+)\)/g;
dateRegex.test("Date(1286445750000)"); // true
dateRegex.test("Date(1286445750000)"); // false
dateRegex.test("Date(1286445750000)"); // true
dateRegex.test("Date(1286445750000)"); // false
dateRegex.test("Date(1286445750000)"); // true
Это показывает, что он каждый раз меняет true/false...
Ответы
Ответ 1
В вашем случае удалите модификатор g
с конца, например:
var dateRegex = /\/Date\((\d+)\)\//;
dateRegex.test("Date(1286445750000)"); // true
dateRegex.test("Date(1286445750000)"); // true
dateRegex.test("Date(1286445750000)"); // true
dateRegex.test("Date(1286445750000)"); // true
dateRegex.test("Date(1286445750000)"); // true
Это ошибка с тем, как регулярные выражения реализованы в ECMAScript 3, там отличная статья о деталях.
Ответ 2
Проблема /g
вызывала проблемы. Следующий код работает нормально.
<div id="test"></div>
<script type="text/javascript">
var reg = /Date\(\d+\)/; //REGEX WITHOUT g
var d="Date(1286445750000)";
$(function(){
var $d=$("div#test");
for(var i=0;i<100;i++){
if(reg.test(d)){
$d.html($d.html()+"<br/>Matched: ["+d+"]");
}
else{
$d.html($d.html()+"<br/>Not Matched: ["+d+"]");
}
}
});
</script>