這行代碼無效的正則表達式:未捕獲的語法錯誤:在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)
你知道爲什麼嗎?
這行代碼無效的正則表達式:未捕獲的語法錯誤:在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)
你知道爲什麼嗎?
把一個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] + '"');
}
的問題是,你的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 ...
然而{}
意味着重複模式,並期望有他們(或兩個數字)之間的數。你真正需要的是逃避所有特殊字符:{}[]|()\,.*+
- 通過在每個字符前加上'\'字符。 (可能還有一些,目前還沒有出現。)
但問題是我只有在arrCategorySort [我]這些簡單的字符串。正如我在上面的評論中所說的,當我添加try catch塊時,它現在可以工作:? – Nikola
只需使用搜索/替換爲那些逃脫它。我對你的其他代碼/項目一無所知,所以不能說什麼有效/無效。我最好的猜測是,它在其他瀏覽器中也不起作用 - 但它們不會引發錯誤。 –
arrCategorySort [i]'是什麼? – Lucero
在arrCategorySort [i]中有一個單詞(或者甚至更多的單詞) - (它是通過這些項目的循環:var arrCategorySort = new Array(「menu」,「food」,「drink」,「drinks」,「2當然「,」三課程「);難道是兩個單詞出現時出現錯誤嗎? – Nikola
你列出的那些應該可以正常工作,但是某些組合可能無效(使用各種大括號和括號,反斜槓等)。 IE和FF可能會以與Chrome不同的方式處理無效的正則表達式 – Lucero