2010-09-30 10 views
12
var dateRegex = /\/Date\((\d+)\)\//g; // [0-9] instead of \d does not help. 
dateRegex.test("/Date(1286443710000)/"); // true 
dateRegex.test("/Date(1286445750000)/"); // false 

Confermare entrambe le console JavaScript di Chrome e Firefox. Che diavolo, ragazzi?Cosa c'è di sbagliato con la mia espressione regolare?

Edit: ancora più semplice banco di prova:

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 

Ciò dimostra che alterna vero/falso ogni volta ...

risposta

21

Nel tuo caso rimuovere il modificatore g dalla fine, per esempio:

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 

È un errore nel modo in cui le espressioni regolari sono implementate in ECMAScript 3, there's a great post on the details here.

+1

Un cattivo comportamento del browser che non è colpa di Microsoft? Cosa dà? =) – RMorrisey

+1

Ancora nessuna intenzione di aggiungere un supporto per la ricerca, eh? – NullUserException

+0

@NullUserException - Non tengo molto a questa parte delle specifiche, alcuni dei regex potrebbero ... ma quell'articolo ha qualche anno, anche se è lo stesso bug che vedono gli OP. Cosa c'è sul tavolo per le specifiche future * potrebbe * essere cambiato, ma nulla di ciò che ho sentito almeno. –

1

Il /g causava problemi. Il seguente codice funziona correttamente.

<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> 
Problemi correlati