2011-03-01 128 views
1

我有一個string.match條件,一直工作,直到我意識到某些單詞是「personal(computer)」在單詞中有像括號這樣的特殊字符。例如我的代碼被抓住這個術語來比較這將是「個人(計算機)」,並通過數據搜索找到的任何實例,但通過使用正則表達式匹配帶特殊字符

string1.match(stringtarget,"ig"); //returns null 

我用正則表達式是新手,所以如何我是否可以解決這個問題,以便爲特殊字符工作。

回答

2

如果你不需要正則表達式的功能,你可以使用indexOf

if (string1.toLowerCase().indexOf(stringtarget.toLowerCase()) >= 0) { 
    // It's in there 
} 

否則(和我猜你使用match是有原因的!),你必須預處理stringtarget以轉義任何特殊字符。

例如,這是我在最近的一個項目中使用的功能來做到這些,這是一個類似PHP函數啓發:

if (!RegExp.escape) { 
    (function() { 
     // This is drawn from http://phpjs.org/functions/preg_quote:491 
     RegExp.escape = RegExp_escape; 
     function RegExp_escape(str) { 
      return String(str).replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!<>\|\:])/g, '\\$1'); 
     } 
    })(); 
} 

所以:

var match = string1.match(RegExp.escape(stringtarget),"ig"); 
+0

我無法預處理stringtarget以轉義特殊字符,因爲那樣我就不得不爲每個我比較的數據都做這件事,並試圖避免這樣做 – Jake 2011-03-01 14:41:58

+0

@Jake:If我正確地理解你,你無法避免它。如果你想使用一個可能包含任何東西作爲正則表達式源的字符串,你必須首先在該字符串中轉義特殊字符。請注意,這僅適用於定義正則表達式的字符串,而不適用於與之匹配的字符串。 – 2011-03-01 14:44:19

+0

+1 indexOf是去這裏的方法 – Peter 2011-03-01 14:45:11