Uncaught SyntaxError:Chrome,FF和IE中的正则表达式无效

时间:2011-08-22 10:20:51

标签: javascript regex google-chrome

这行代码:

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

在Firefox(6.0)和IE(7.0)中运行良好,但在Chrome(13.0.782.112)中运行不正确

你知道为什么吗?

2 个答案:

答案 0 :(得分: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] + '"');  
}

答案 1 :(得分:1)

问题是,对于RegExp解析器而言,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 ... {} {}[]|()\,.*+ {{1}}表示重复模式,并希望它们之间有一个数字(或两个数字)。你真正需要的是逃避所有特殊的字符:{{1}} - 在每个字符前加上'\'字符。 (可能还有一些,目前让我逃脱。)