2010-10-08 14 views
29

Regex test() daje mi problemy w Firefoksie i Chrome, ale działa bezbłędnie w Operze i Safari.regex.test() działa tylko co drugi raz

kod zmartwiony:

var pattern = /(\s+(?!\$\w+)|(^(?!\$\w+)))/g; 
if(pattern.test(String(id).replace(/\s+OR|AND\s+/g, ''))) { 
searchError("You suck."); 
return 1; 
} 

kiedy przechodzą w białej przestrzeni, blokuje go za każdym razem. Kiedy przejdziesz w coś takiego jak '$a b', będzie to działało co drugi raz w przeglądarce Firefox/Chrome. DZIWNE.

+0

Zastąp symbol 'id' czymś statycznym i sprawdź, czy to działa. –

+1

omg :-) wydaje się być zabawnym błędem ... –

Odpowiedz

59

To błąd w silniku RegEx, a similar question with the same issue came up here.

Z mojej odpowiedzi na to pytanie: Jest to błąd związany ze sposobem implementacji wyrażeń regularnych w ECMAScript 3, there's a great post on the details here.

Podstawy są /regex/ z modyfikatorem g nie resetuje poprawnie, więc wielokrotność .test() nazywa zastępcę między true i false jeśli wszyscy powinny być true, co inne połączenia skutecznie przywraca go.

+0

Och snap. jesteście niesamowici. Dzięki za szybkie odpowiedzi i pomocne linki (to było trudne do szukania rozwiązań). – Jacksonkr

+1

@ Jackson, jeśli to odpowiada na twoje pytanie (powinno), a następnie kliknij mały znacznik wyboru, po lewej stronie - aby oznaczyć go jako zaakceptowaną odpowiedź. –

+0

@Brock Adams To musiało opuścić moją uwagę. Dzięki za przypomnienie. – Jacksonkr

Powiązane problemy