Per*_*ddy 121 javascript arrays string substring contains
挺直的.在javascript中,我需要检查一个字符串是否包含数组中保存的任何子字符串.
T.J*_*der 176
没有任何内置功能可以为你做到,你必须为它编写一个函数.
如果您知道字符串不包含正则表达式中特殊的任何字符,那么您可以作弊,如下所示:
if (new RegExp(substrings.join("|")).test(string)) {
// At least one match
}
Run Code Online (Sandbox Code Playgroud)
...创建一个正则表达式,它是您正在寻找的子串的一系列替换(例如one|two
),并测试是否有任何匹配,但是如果任何子串包含任何特殊的字符在正则表达式(*
,[
等等),你必须先逃避他们,你最好只是在做无聊的循环来代替.
更新:
在对该问题的评论中,Martin询问Array#map
ECMAScript5中的新功能.map
并没有那么多帮助,但是some
:
if (substrings.some(function(v) { return str.indexOf(v) >= 0; })) {
// There's at least one
}
Run Code Online (Sandbox Code Playgroud)
实例(仅适用于现代浏览器)
请注意,它确实意味着一些开销,并且您只在符合ECMAScript5的实现上拥有它(例如,不是IE7或更早版本;甚至可能不是IE8),但是如果你真的喜欢这种编程风格的话. (你可以使用ECMAScript5垫片,这个或其他几个垫片.)
rav*_*ren 52
var yourstring = 'tasty food'; // the string to check against
var substrings = ['foo','bar'],
length = substrings.length;
while(length--) {
if (yourstring.indexOf(substrings[length])!=-1) {
// one of the substrings is in yourstring
}
}
Run Code Online (Sandbox Code Playgroud)
Pra*_*ena 29
一线解决方案
substringsArray.some(substring=>yourBigString.includes(substring))
Run Code Online (Sandbox Code Playgroud)
返回true\false
substringexists\does'nt exist
需要ES6支持
Jim*_*ler 20
function containsAny(str, substrings) {
for (var i = 0; i != substrings.length; i++) {
var substring = substrings[i];
if (str.indexOf(substring) != - 1) {
return substring;
}
}
return null;
}
var result = containsAny("defg", ["ab", "cd", "ef"]);
console.log("String was found in substring " + result);
Run Code Online (Sandbox Code Playgroud)
hal*_*ube 18
对于人们谷歌搜索,
应该是可靠的答案.
const substrings = ['connect', 'ready'];
const str = 'disconnect';
if (substrings.some(v => str === v)) {
// Will only return when the `str` is included in the `substrings`
}
Run Code Online (Sandbox Code Playgroud)
这是(IMO)迄今为止最好的解决方案。这是一个现代 (ES6) 解决方案:
some()
其他答案中使用的函数不同,这个函数不只是返回一个布尔值(真/假)享受!
const arrayOfStrings = ['abc', 'def', 'xyz'];
const str = 'abc';
const found = arrayOfStrings.find(v => (str === v));
Run Code Online (Sandbox Code Playgroud)
在这里,found
在这种情况下将设置为“abc”。这将适用于精确的字符串匹配。
如果你使用:
const found = arrayOfStrings.find(v => str.includes(v));
Run Code Online (Sandbox Code Playgroud)
found
在这种情况下,将再次设置为“abc”。这不允许部分匹配,因此如果 str 设置为 'ab',found
将是未定义的。
const found = arrayOfStrings.find(v => v.includes(str));
Run Code Online (Sandbox Code Playgroud)
反而。因此,如果 str 设置为 'ab',found
则将设置为 'abc'。
十分简单!
var str = "texttexttext";
var arr = ["asd", "ghj", "xtte"];
for (var i = 0, len = arr.length; i < len; ++i) {
if (str.indexOf(arr[i]) != -1) {
// str contains arr[i]
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果测试的顺序无关紧要,你可以使用它(只有一个循环变量):
var str = "texttexttext";
var arr = ["asd", "ghj", "xtte"];
for (var i = arr.length - 1; i >= 0; --i) {
if (str.indexOf(arr[i]) != -1) {
// str contains arr[i]
}
}
Run Code Online (Sandbox Code Playgroud)
const str = 'Does this string have one or more strings from the array below?';
const arr = ['one', 'two', 'three'];
const contains = arr.some(element => {
if (str.includes(element)) {
return true;
}
return false;
});
console.log(contains); // true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
114345 次 |
最近记录: |