Node.js中如何检查字符串是否包含两张表内容并按规则输出结果?
在Node.js中检查字符串是否同时包含两类指定内容的实现方案
嘿,这个需求其实很好搞定!核心思路就是先定义好你的“两张表”——也就是有效问候语集合和目标名称集合,然后检查输入消息是否同时满足包含至少一个问候语和包含至少一个目标名称这两个条件。
步骤1:定义匹配集合
首先把你的问候语和目标名称分别存进两个数组里(这就是你说的“两张表”):
// 有效问候语集合 const validGreetings = ['hey', 'hello']; // 目标名称集合 const targetNames = ['john', 'johnny'];
步骤2:编写基础检查函数
我们可以用Array.prototype.some()方法快速判断是否有匹配项,同时统一转成小写来避免大小写敏感的问题:
function checkMessage(message) { // 将消息转为小写,消除大小写差异带来的匹配误差 const lowerCaseMessage = message.toLowerCase(); // 检查是否包含至少一个有效问候语 const hasValidGreeting = validGreetings.some(greeting => lowerCaseMessage.includes(greeting) ); // 检查是否包含至少一个目标名称 const hasTargetName = targetNames.some(name => lowerCaseMessage.includes(name) ); // 两个条件都满足才返回true return hasValidGreeting && hasTargetName; }
步骤3:测试你的示例
把你给出的测试用例跑一遍,结果完全符合预期:
console.log(checkMessage('hey john')); // 输出: true console.log(checkMessage('yo johnny')); // 输出: false console.log(checkMessage('hello johnny'));// 输出: true console.log(checkMessage('hey evan')); // 输出: false
进阶:精确匹配完整单词
如果担心出现部分匹配的问题(比如不想让john误匹配到johnson),可以用正则表达式的单词边界\b来确保匹配完整的单词:
function checkExactMatch(message) { // 检查问候语:使用单词边界+不区分大小写模式 const hasValidGreeting = validGreetings.some(greeting => new RegExp(`\\b${greeting}\\b`, 'i').test(message) ); // 检查名称:同样使用单词边界+不区分大小写模式 const hasTargetName = targetNames.some(name => new RegExp(`\\b${name}\\b`, 'i').test(message) ); return hasValidGreeting && hasTargetName; }
这个版本会严格匹配完整的单词,比如hey johnson会返回false,因为john不是独立的完整单词。
内容的提问来源于stack exchange,提问作者Gatitos Mansion
相关产品推荐
相关产品推荐

