如何检查字符串是否包含 JavaScript 中子字符串数组中的文本?

新手上路,请多包涵

很直接。在 javascript 中,我需要检查一个字符串是否包含数组中保存的任何子字符串。

原文由 PercivalMcGullicuddy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 600
2 个回答

没有任何内置功能可以为您执行此操作,您必须为它编写一个函数,尽管它可以只是对 some 数组方法的回调。

两种方法供您使用:

  • 排列 some 方法

  • 正则表达式

排列 some

数组 some 方法(在 ES5 中添加)使这变得非常简单:

 if (substrings.some(function(v) { return str.indexOf(v) >= 0; })) {
 // There's at least one
 }

使用箭头函数更好,并且新的 includes 方法(都是 ES2015+):

 if (substrings.some(v => str.includes(v))) {
 // There's at least one
 }

现场示例:

 const substrings = ["one", "two", "three"];
 let str;

 // Setup
 console.log(`Substrings: ${substrings}`);

 // Try it where we expect a match
 str = "this has one";
 if (substrings.some(v => str.includes(v))) {
 console.log(`Match using "${str}"`);
 } else {
 console.log(`No match using "${str}"`);
 }

 // Try it where we DON'T expect a match
 str = "this doesn't have any";
 if (substrings.some(v => str.includes(v))) {
 console.log(`Match using "${str}"`);
 } else {
 console.log(`No match using "${str}"`);
 }

正则表达式

如果您 知道 字符串不包含任何正则表达式中的特殊字符,那么您可以作弊,如下所示:

 if (new RegExp(substrings.join("|")).test(string)) {
 // At least one match
 }

…创建一个正则表达式,它是您正在寻找的子字符串的一系列 _交替_(例如 one|two )并测试是否有匹配的任何一个,但如果任何子字符串包含任何字符在正则表达式( *[ 等)中很特殊,你必须先逃避它们,你最好只做无聊的循环。有关逃避它们的信息,请参阅 此问题的答案

现场示例:

 const substrings = ["one", "two", "three"];
 let str;

 // Setup
 console.log(`Substrings: ${substrings}`);

 // Try it where we expect a match
 str = "this has one";
 if (new RegExp(substrings.join("|")).test(str)) {
 console.log(`Match using "${str}"`);
 } else {
 console.log(`No match using "${str}"`);
 }

 // Try it where we DON'T expect a match
 str = "this doesn't have any";
 if (new RegExp(substrings.join("|")).test(str)) {
 console.log(`Match using "${str}"`);
 } else {
 console.log(`No match using "${str}"`);
 }

原文由 T.J. Crowder 发布,翻译遵循 CC BY-SA 4.0 许可协议

一线解决

substringsArray.some(substring=>yourBigString.includes(substring))

返回 true\false 如果子串 exists\does'nt exist

需要 ES6 支持

原文由 Praveena 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题