2014-07-09 32 views
0

如果我使用一個新的正則表達式對象是這樣的:正則表達式來找到特定的神經末梢

for(i=0; i < aray.length; i++){ 
    searchTerm = new RegExp("\\b" + aray[i] + "(e\\b)", "gi"); 
    word = testText.match(searchTerm); 
    if(word){ 
     found.push(word); 
    } 
} 

所得陣列「找到」包含{一,三,片}。 但是如果我改變到:

for(i=0; i < aray.length; i++){ 
    searchTerm = new RegExp("\\b" + aray[i] + "(e\\b)"); 
    word = testText.match(searchTerm, "gi"); 
    if(word){ 
     found.push(word); 
    } 
} 

所得陣列「找到」包含{一個,例如,三個,即,片,電子}。附加e從哪裏來?

此外,搜索以「e」或「es」或「et」結尾的單詞的最佳方法是什麼?

+1

附加'e's來自'found.push(word)'行。基本上,匹配返回一個不是布爾值的匹配數組。使用'test'方法來獲得布爾值。 – Pete

+0

@你是對的。閱讀更多關於[JavaScript String match()方法](http://www.w3schools.com/jsref/jsref_match.asp) – Braj

回答

0

附加e從哪裏來?

這是由於您的捕獲組"(e\\b)"

使用此正則表達式來避免它:

searchTerm = new RegExp("\\b" + aray[i] + "e\\b"); 
0

「最好」的方法是主觀的,但這是我會做什麼。

如果你只支持IE9及以上版本,那麼我會強烈推薦使用filter()方法。

var myArray = [ 'bananna', 'doge', 'doges', 'doget', 'dogets' ] 

var results = myArray.filter(function(item) { 
    return (/(e|es|et)$/i.test(item)); 
}); 

console.log(results); 

正則表達式轉換(e|es|et)$大致成找到在字符串的末尾任何的「e」或「ES」或「等」。所以這將匹配以'e','es'或'et'結尾的任何單詞。演示請參閱jsFiddle

+0

'return /(e | es | et)$/i.test(item);' –

+0

@zyklus良好的捕捉,不需要'g'標誌,因爲只有1個結尾。 :) – Pete