2011-06-29 19 views
2

感謝您閱讀我的問題。Actionscript使用 Q來忽略特價商品。獲得奇怪的結果

我在actionscript中使用RegExp對象來簡單地測試一個字符串在另一個字符串中的出現。有時,字符串可能包含RegEx特殊字符,即「*」。

要處理,我一直在串聯\ Q可搜索字符串的開始,像這樣......

(String(reportItem[attributeToSearch])).search(new RegExp(("\Q" + searchText), "i")) 

當前工作更大的字符串和字符串「*」。 但是,我遇到了一個問題,我正在搜索的字符串是「射彈,爆裂電荷」。我搜索「,s」,結果它返回-1。如果我在沒有\ Q的情況下搜索相同的東西,那麼它可以正常工作,但是「*」這個案件就會中斷。

什麼給?

在此先感謝!

+0

您還需要在'\ Q'逃避'\''新的正則表達式((」 \\ Q「+ searchText)' –

回答

2

你需要躲避\\Q

new RegExp(("\\Q" + searchText), "i"); 

試試這個:

var regExp:RegExp; 
regExp = new RegExp("\Qs,", "i"); 
trace(regExp.toString()); // /Qs,/i 

regExp = /\Qs,/i;    
trace(regExp.toString()); // /\Qs,/i 

regExp = new RegExp("\\Qs,", "i"); 
trace(regExp.toString()); // /\Qs,/i 
+0

好點,我沒有注意到這是缺少的 – takteek

+0

謝謝,這是問題所在。 – Craig

2

在使用下面的代碼將其包含在正則表達式中之前,您可以在用戶搜索中轉義任何特殊字符。不幸的是,flex沒有任何內置的方法來轉義正則表達式字符串。

private function escapeRegex(s:String):String { 
    var result:String = s.replace(
     new RegExp("([{}\(\)\^$&.\*\?\/\+\|\[\\\\]|\]|\-)","g"), "\\$1"); 
    return result; 
} 

(感謝http://www.flexer.info/2008/08/07/how-to-escape-all-regexp-special-chars/

您也可以考慮只使用常規的搜索和toLowerCase如果你不需要採取任何正則表達式的設施。正如Jacob指出的那樣,\ Q確實有效,這是一個比手動轉義更好的解決方案。

+0

-1用於手動轉義特殊字符+1用於推薦常規搜索net 0 –