2010-10-08 10 views
29

正則表達式test()在Firefox和Chrome中給我提供了一些問題,但它在Opera和Safari中完美無缺。regex.test()僅適用於其他任何時間

困擾代碼:

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

當您在空格傳,它的每一次阻止它。當你傳入類似'$a b'之類的東西時,它會在Firefox/Chrome中每隔一段時間工作一次。奇怪的。

+0

用靜態的東西替換id,看看是否有效。 – 2010-10-08 14:44:17

+1

omg :-)看起來像一個有趣的bug ... – 2010-10-08 14:46:24

回答

59

這是RegEx引擎中的一個錯誤,a similar question with the same issue came up here

從我對該問題的回答:這是ECMAScript 3,there's a great post on the details here中實現正則表達式的方式的錯誤。

的基礎是/regex/g修改不正確地重置,所以多個.test()調用truefalse之間交替如果每個人都應該true,所有其他的呼叫成功重置它。

+0

哦,快照。你們真棒。感謝您的快速回復和有用的鏈接(這是搜索解決方案的一個難題)。 – Jacksonkr 2010-10-08 14:47:54

+1

@傑克遜,如果這回答你的問題(它應該),然後點擊左邊的小複選標記 - 將其標記爲接受的答案。 – 2010-10-09 00:23:44

+0

@布洛克亞當斯這一定是跳過我的注意力。感謝您的提醒。 – Jacksonkr 2010-10-22 17:20:04

相關問題