非常简单。在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.map
ECMAScript5中的新方法。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()。
问题内容: 我想检查我的字符串是否包含+字符。我尝试了以下代码 但是它没有给出预期的结果。 问题答案: 您需要此: 类的方法不使用正则表达式作为参数,而是使用普通文本。 编辑: 输出: