2014-07-13 73 views
0

我之前問過一個非常詳細的問題,但它被標記爲重複,即使它不是。搜索具有特定開始和結尾的單詞

因此,我會嘗試解釋我正在儘可能簡單地做的事情。我想搜索一個文本字符串,查找以「mak」,「mind」和「mass」(它們在數組中)等特定字母開頭的單詞,並以「extra」或「e」或「er」結尾。在這個例子中,「mak」,「make」,「maker」,「mind」,「minde」,「minder」,「mass」,「masse」,「masser」。

我使用的代碼僅查找數組中每個單詞的第一個匹配項,例如示例中的「mak」,「mind」和「mass」。

derPro = ['mak','mind', 'mass', ; 
for(i = 0; i < derPro.length; i++){ 
searchTerm = new RegExp(
        "\\b" + derPro[i] + "\\b|" + 
        "\\b" + derPro[i] + "e\\b|" + 
        "\\b" + derPro[i] + "er\\b,'gi'"); 
word = testText.match(searchTerm, "gi"); 

回答

0

從索引1

/(\b(mak|mind|mass)(e|er)?\b)/gi 

Online demo

+3

請你離開我的學習很短的評論。 – Braj

1

獲取匹配的組這應該工作:

var derPro = ['mak','mind', 'mass']; 

var searchTerm = new RegExp('\\b((?:' + derPro.join('|') + ')(?:er?)?)\\b', "gi"); 
//=> /\b((?:mak|mind|mass)(?:er?)?)\b/gi 

// now match the regex in a while loop 
var matches=[] 
while (m = searchTerm.exec('mass maker minde')) matches.push(m[1]); 

console.log(matches); 

//=> ["mass", "maker", "minde"] 
+0

請你能告訴我我的正則表達式模式有什麼問題。 – Braj

+0

對不起@Braj,你的正則表達式看起來不像任何錯誤。不知道它爲什麼會倒下。 – anubhava

0

這工作,我知道你問一個正則表達式,但我認爲這會很有用。

var keys = [ 
    'mak', 
    'mind', 
    'mass' 
]; 

var test_words = [ 
    'mak', 
    'make', 
    'maker', 
    'mind', 
    'mass' 
]; 

var matches = []; 

for(var i = 0; i < keys.length; i++) { 
    var key = keys[i]; 

    for(var ii = 0; ii < test_words.length; ii++) { 
    var test_word = test_words[ii]; 

    if(test_word.substr(0, key.length) == key) { 

     if(test_word.substr(-1) == 'e' || test_word.substr(-2) == 'er') { 
     matches.push(test_word); 

     } 
    } 
    } 
} 

console.log(matches); 
// [make, maker, minde] 

jsfiddle

相關問題