搜索有特定开头和结尾的单词

Search for words with specific starts and endings

本文关键字:结尾 单词 开头 搜索      更新时间:2023-09-26

我之前问了一个非常详细的问题,但它被标记为重复,即使它不是。

所以我会尽可能简单地解释我要做的事情。我想在一个文本字符串中搜索以特定字母开头的单词,如"mak"、"mind"answers"mass"(它们在一个数组中),并以"e"或"er"结尾。在这个例子中就是"mak", "make", "maker", "mind", "minde", "minder", "mass", "masse", "masser"。

我使用的代码只查找数组中每个单词的第一个匹配项,例如示例中的"mak","mind"answers"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");

应该可以:

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"]

从索引1中获取匹配的组

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

在线演示

这个工作,我知道你要求一个正则表达式,但我认为这将是有用的。

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