(我不认为这是重复的原因是它涉及匹配字符串中每个单词的开始,而不是字符串中的任何内容)
我正在使用Javascript / jQuery。说我有一个刺痛,这是:
Muncie South Gateway Project
我正在创建一个实时搜索框,它会在每次按键时检查字符串的输入。如果输入匹配单词的开头而不是中间,我想返回匹配。例如:
Mu = Match
Muncie = Match
unc = No Match
cie = No Match
Gatewa = Match
atewa = No Match
我目前正在使用此作为我的支票:
if (new RegExp(input)).test(string.toLowerCase()) {return '1';}
然而,这匹配所有字母,包括单词中间的字母。有了它,然后我的例子得到了这个结果:
M = Match
Mu = Match
Mun = Match
Muncie = Match
unc = Match // Should not match
cie = Match // Should not match
Gatewa = Match
atewa = Match // Should not match
我知道这可以通过将字符串分成单独的单词并测试每个单词来完成。但我不确定会有多高效。有没有办法做到这一点?
答案 0 :(得分:2)
您可以使用单词边界来确保给定的输入仅匹配单词字符的开头:
if (new RegExp("\\b" + input)).test(string.toLowerCase()) {return '1';}
编辑:根据以下评论,您可以使用:
var re = new RegExp("(?:^|\\s)" + input, "i"));
if (re.test(string)) {return '1';}
答案 1 :(得分:1)
我会使用StartsWith和Contains:
// input
instring // the user string
searchstr // the string to search
if (searchstr.ToLower().StartsWith(instring.ToLower())
|| searchstr.ToLower().Contains(" "+instring.ToLower()))
{
// etc