2012-12-06 52 views
2

有一個陣列JS - 使用正則表達式

var words =new Array(
      'apple', 
      'apa', 
      'found', 
      'stackoverflow', 
      'will' 
    ); 

和可變

var search = 'papa.com'; 

現在我想設置的表達式這樣

var Flag=false; 
var regexp; 
for(var i in words) 
{ 
    regexp = new RegExp('(^(.*\.))?' + words[i] + '\.([a-z]{2,3})(\.(\w+))?','i'); 
    if (regexp.test(search)) {Flag=true;} 
} 
alert (Flag); 

查找在數組鍵匹配循環應該一個一個地得到words數組鍵,然後設置正則表達式並測試search變量反對構建的表達式,如果出現其中一個或多個匹配項Flag會出現true。

但是,id不起作用。

+1

「鍵」,你的意思是「價值觀」?無論如何,避免使用'new Array',避免'for in'迭代數組,避免動態正則表達式。並確保'打破'!無論如何,正則表達式應該做什麼? – Ryan

+0

另外,'(^(。* \。))?'可能不會做你認爲它的做法...... – Ryan

+1

請注意[XY問題](http://meta.stackexchange.com/questions/66377/什麼 - 是最XY-問題)。你想做什麼? – Amadan

回答

0

當您從字符串構建正則表達式時,您需要轉義您的轉義序列。這是因爲字符串文字表示法中的\也開始轉義序列,因此\被刪除。

若要在字面語法構建的字符串中包含文字\字符,您需要\\

regexp = new RegExp('(^(.*\\.))?' + words[i] + '\\.([a-z]{2,3})(\\.(\\w+))?','i'); 

你的正則表達式是結束了.代替\.,這當然有非常不同的含義。

+0

謝謝你,我不知道 – codedme