2007年11月2日

Javascript 中正規表示式的小問題

前兩天為了實作關鍵字濾除的需要,所以又把正規表示式搬出來用。

一開始的想法是建立一個關鍵字表示式陣列,然後在實際檢測時丟進這個陣列中整個 test() 一遍即可,這樣做似乎沒有問題,但實際使用時會發現除了第一次的檢測一定正確外,之後的檢測動作卻會時有時無,讓人疑惑。

於是懷疑可能是一個正規表示式物件一定進行過 test() 之後就會處於某種失效的狀態,只要在這種狀態內的各種比對動作都會不正常。

所以,解決的方式就是每次比對後都要記得重置表示式物件,如下例:

var keywords = { '關鍵字1', '關鍵字2' };
var re = new RegExp();

function hasKeywords( content ) {

for( i = 0; i < keywords.length; i++ ) { // 重置表示式物件 re.compile( keywords[i], 'ig' ); // 測試是否符合 if( re.test( content ) ) { return true; } }

return false; }