2011-08-22 45 views
1

這行代碼無效的正則表達式:未捕獲的語法錯誤:在Chrome,FF和IE罰款

if (new RegExp("\\b" + arrCategorySort[i]+ "\\b", "g").test(titleText)) 
{ 
    catFound = true; 
} 

完美的作品在Firefox(6.0),並在IE(7.0),但無法在Chrome(13.0。 782.112)

你知道爲什麼嗎?

+0

arrCategorySort [i]'是什麼? – Lucero

+0

在arrCategorySort [i]中有一個單詞(或者甚至更多的單詞) - (它是通過這些項目的循環:var arrCategorySort = new Array(「menu」,「food」,「drink」,「drinks」,「2當然「,」三課程「);難道是兩個單詞出現時出現錯誤嗎? – Nikola

+0

你列出的那些應該可以正常工作,但是某些組合可能無效(使用各種大括號和括號,反斜槓等)。 IE和FF可能會以與Chrome不同的方式處理無效的正則表達式 – Lucero

回答

4

把一個try/catch在你的代碼,並顯示導致該異常值:

try { 
    if (new RegExp("\\b" + arrCategorySort[i]+ "\\b", "g").test(titleText)) 
     catFound = true; 
} 
catch (e) { 
    confirm (e + ' : at index ' + i + ', category is "' + arrCategorySort[i] + '"'); 
} 
+0

我得到此錯誤消息:SyntaxError:無效的正則表達式:/ \ bfunction(a,b){var c = b ||窗口,d = []; for(var e = 0,f = this.length; e Nikola

+0

我工作的原因是catch完全忽略了錯誤,所以其餘代碼正在執行。該錯誤似乎是因爲你正在傳遞一個函數作爲arrCategerySort [i]。我們需要知道如何生成索引。請提供迭代i的循環的來源。 – HBP

1

的問題是,你的arrCategorySort[i]爲一串包含特殊字符,只要正則表達式解析器而言(例如{}[])。有了您的到位串,你試圖解析正則表達式

/\bfunction (a,b){var c=b||window,d=[];for(var e=0,f=this.length;e<f;++e){if(!a.call(c,this[e],e,this))continue;d.push(this[e])‌​}return d}\b/ 

在開始的時候你(a,b)後,{}你有var ...然而{}意味着重複模式,並期望有他們(或兩個數字)之間的數。你真正需要的是逃避所有特殊字符:{}[]|()\,.*+ - 通過在每個字符前加上'\'字符。 (可能還有一些,目前還沒有出現。)

+0

但問題是我只有在arrCategorySort [我]這些簡單的字符串。正如我在上面的評論中所說的,當我添加try catch塊時,它現在可以工作:? – Nikola

+0

只需使用搜索/替換爲那些逃脫它。我對你的其他代碼/項目一無所知,所以不能說什麼有效/無效。我最好的猜測是,它在其他瀏覽器中也不起作用 - 但它們不會引發錯誤。 –

相關問題