当前位置: 首页 > 面试题库 >

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

勾通
2023-03-14
问题内容

非常简单。在javascript中,我需要检查字符串是否包含数组中包含的任何子字符串。


问题答案:

没有内置功能可以为您做到这一点,您必须为其编写一个函数。

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

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

…这会创建一个正则表达式,该正则表达式是您要查找的子字符串(例如)的一系列 替换
one|two并测试是否有匹配的子字符串,但是如果任何子字符串包含任何特殊字符在正则表达式(*[等)中,您必须先将其转义,最好只进行无聊的循环。

现场示例:

var substrings = ["one", "two", "three"];

var str;



// Setup

console.log("Substrings: " + substrings.join(","));



// 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 + "'");

}

在对该问题的评论中,Martin询问了Array.prototype.mapECMAScript5中的新方法。map并没有太多帮助,但是some

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

现场示例:

var substrings = ["one", "two", "three"];

var str;



// Setup

console.log("Substrings: " + substrings.join(","));



// Try it where we expect a match

str = "this has one";

if (substrings.some(function(v) { return str.indexOf(v) >= 0; })) {

    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(function(v) { return str.indexOf(v) >= 0; })) {

    console.log("Match using '" + str + "'");

} else {

    console.log("No match using '" + str + "'");

}

尽管对polyfill来说是微不足道的,但您只能在符合ECMAScript5的实现中使用它。

2020年更新some带有箭头功能(ES2015 +)的示例可能更简单,您可以使用includes而不是indexOf

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

现场示例:

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

let str;



// Setup

console.log("Substrings: " + substrings.join(","));



// 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 + "'");

}

甚至扔掉bind它,尽管对我来说箭头功能更具可读性:

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

现场示例:

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

let str;



// Setup

console.log("Substrings: " + substrings.join(","));



// Try it where we expect a match

str = "this has one";

if (substrings.some(str.includes.bind(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 (substrings.some(str.includes.bind(str))) {

    console.log("Match using '" + str + "'");

} else {

    console.log("No match using '" + str + "'");

}


 类似资料:
  • 问题内容: 通常我希望有一种方法,但是似乎没有。 有什么合理的方法来检查? 问题答案: ECMAScript 6引入了: 但是不支持。在ECMAScript 5或更旧的环境中,使用,当找不到子字符串时,它将返回-1:

  • 通常我希望有方法,但似乎没有。 对此有什么合理的检查方法?

  • 问题内容: 我有一个购物车,在下拉菜单中显示产品选项,如果它们选择“是”,我想使页面上的其他一些字段可见。 问题是购物车的文本中还包含价格修饰符,每个产品的价格修饰符可能不同。以下代码有效: 但是我宁愿使用这样的东西,它不起作用: 我只想在所选选项包含单词“是”的情况下执行操作,并且会忽略价格修饰符。 问题答案: 像这样: …或者您可以使用波浪号运算符: 之所以有效,是因为如果根本找不到该字符串,

  • 问题内容: 我需要检查一个字符串是否包含汉字。搜索之后,我发现我必须在这种模式下查看正则表达式,但是我无法使正则表达式正常工作。 任何人都经历过这种情况?正则表达式正确吗? 问题答案: 作为讨论在这里,在Java 7(即正则表达式编译器符合要求RL1.2属性从UTS#18 Unicode的正则表达式 ),你可以使用下面的正则表达式匹配中国(当然,CJK)字符: 可以简单地理解为

  • 问题内容: 我正在尝试检测字符串是否包含至少一个存储在数组中的URL。 这是我的数组: 该字符串由用户输入并通过PHP提交。在确认页面上,我想检查输入的URL是否在数组中。 我尝试了以下方法: 无论输入什么,返回值始终为“找不到匹配项”。 这是正确的做事方式吗? 问题答案: 尝试这个。 如果要检查不区分大小写,请使用stristr()或stripos()。

  • 问题内容: 我想检查我的字符串是否包含+字符。我尝试了以下代码 但是它没有给出预期的结果。 问题答案: 您需要此: 类的方法不使用正则表达式作为参数,而是使用普通文本。 编辑: 输出: