我正在尝试开发一种方法,以将数组(fItems)中的单词与已转换为数组(stringArray)的字符串中的单词进行匹配。我下面的代码大多数时候都有效,但是麻烦的是'includes()'搜索模式,而不是匹配整个单词。

举个例子。如果我正在寻找“wall”,就会感到困惑,并且返回“wallet”。另外,我希望输入灵活。因此,例如,如果输入了玻璃,则“玻璃碎片”项仍可退还。

有没有更精确的方法来匹配确切的单词?

for (let i = 0; i < db.items.length; i++) {
		for (let j = 0; j < stringArray.length; j++) {
			if (db.items[i].name.includes(stringArray[j])) {
				fItems.push(db.items[i]);
			};
		}
	};

最佳答案

从评论



听起来您真正想要的是字符串中的模式匹配。正则表达式将是最好的选择,因为这就是为什么要创建正则表达式(模式与替换选项匹配)的原因。

let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive

在上面的代码中,\b用于表示单词边界,因此glass是匹配项,但glassware将不匹配。 i用于指定不区分大小写的代码。

另外,要在线测试表达式,然后再将其放入代码中,您可以使用此站点https://regex101.com/,我一直在使用它来验证我构建的表达式是否正确。

关于javascript - 替代.includes()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42157408/

10-10 12:59