JavaScript单词搜索,从单词的开头开始带空格和不带空格



我正在尝试编写一个搜索函数,允许用户输入以下条件之一来返回"胡志明市"。对我来说棘手的是它必须始终搜索任何单词的开头。最重要的是,它还必须与其他语言一起使用,但是如果我可以让拉丁字符工作,那至少是一个开始。

                //ho chi minh city
                //hochiminhcity
                //chi minh
                //chiminh
                //chiminhcity
                //chi minh city
                //ho
                //chi
                //minh
                //city
            containsTerm: function containsTerm (needle, haystack) {
                var _this = LocationPickerCtrl,
                    ndl = _this.formatStr(stringHelper.escapeRegExp(needle)),
                    re = new RegExp('(?:^|\s)' + ndl, 'gi'),
                    found = false,
                    len,
                    key = _this.formatStr(haystack.Key),
                    name = _this.formatStr(haystack.Name);
                //check airport code
                if (key.indexOf(ndl) > -1) {
                    found = true;
                }
                //start of word
                if (re.test(name)) {
                    found = true;
                }
                if (name.indexOf(' ') > -1) {
                    if (name.replace(/s/g, '').indexOf(needle) === 0) {
                        found = true;
                    }
                }
return found
}

任何帮助将不胜感激。提前谢谢你!

没有及时看到您需要正则表达式:(

var words = ['ho', 'chi', 'minh', 'city'];
var hochiming = function hochiming(words, input) {
  var data = input;
  var match = false;
  for (var i = 0; i < words.length; i++) {
    if (data.length === 0) {
      return match;
    } else if (data.substring(0, words[i].length) === words[i]) {
      match = true;
      data = data.substring(words[i].length);
      if (data[0] === " ") {
        data = data.substring(1);
      }
    } else if (match) {
      return false;
    }
  }
  return match;
}
var data = ['hochiminhcity', 'chi minh', 'chiminh', 'chiminhcity', 'chi minh city', 'ho', 'chi', 'minh', 'city'];
data.forEach(function(entry) {
  console.log('result:', hochiming(words, entry));
});
console.log('mistakes:');
(['ho chi minh ci', 'm aezfam', 'hochimineahcity', ' minhchi']).forEach(function(entry) {
  console.log('result:', hochiming(words, entry));
});

如果你走正则表达式路线,它可以像这样完成 -

 # /(?=[hcm])(?:(?:ho)?s*chis*minh(?:s*city)?|(?:ho|chi|minh|city))/
 (?= [hcm] )                           # Start at a 'h', 'c', or 'm'
 (?:
      (?: ho )?                             # Optional 'ho'
      s* chi s* minh                      # Must have 'chi minh'
      (?: s* city )?                       # Optional 'city'
   |                                      # or, 
      (?: ho | chi | minh | city )          # One of either 'ho','chi','minh', or 'city'
 )

最新更新