如何在JavaScript中检测字符串含指定词/短语且排除内嵌情况
解决方案
要实现仅匹配独立单词/短语、排除内嵌词的需求,核心是用正则表达式的单词边界特性,同时处理正则特殊字符和大小写问题,替换原代码中的includes方法即可,具体步骤如下:
1. 正则转义函数
首先需要一个函数转义待匹配内容中的正则特殊字符(如.、?、*等),避免这些字符干扰正则语法:
function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); }
2. 修改匹配逻辑
将原代码中的includes替换为正则测试,通过\b(单词边界)确保匹配的是独立的单词/短语,同时开启大小写不敏感(i标志)适配示例中的"Hi"和"hi"匹配需求:
for(let a = 0; a < userquestions.length; a++) { for (let b = 0; b < userquestions[a].length; b++) { const targetPhrase = userquestions[a][b]; // 转义特殊字符后添加单词边界,构建正则表达式 const matchRegex = new RegExp(`\\b${escapeRegExp(targetPhrase)}\\b`, 'i'); if(matchRegex.test(usermessage)) { responsemessage += chatbotresponses[a][Math.floor(Math.random() * chatbotresponses[a].length)]; } } }
逻辑说明
- 单词边界
\b:匹配单词字符(字母、数字、下划线)与非单词字符(空格、标点、字符串首尾)的分界,确保不会匹配"this"中的"hi"这类内嵌子串。 - 正则转义:如果待匹配短语包含
.、?等特殊字符,转义后才能保证正则语法正确,比如匹配"cool?"时不会把?当成正则量词。 - 大小写不敏感
i:统一处理大小写差异,示例中的"Hi"和"hi"会被视为匹配。
内容的提问来源于stack exchange,提问作者Pratyush
相关产品推荐
相关产品推荐

