如何有效地检查数组中的任何子字符串是否包含在另一个字符串中
How to efficiently check if any substring in an array is contained in another string
我想要检查字符串列表中的子字符串是否包含在字符串中。我有一些有用的东西,但我希望有一些更干净、更有效的东西,最好只是一行,我可以调用像if(string.contains(list.any))
或其他东西。
var list = ['aa','bb','cc','dd'];
var string = "nygaard"; // true because "aa" is in "nygaard".
for (var i = 0; i < list.length; i++) {
if( string.indexOf( list[i] ) > -1 ) {
alert("True");
break;
}
}
var list = ['aa','bb','cc','dd'];
var string = "nygaard";
var patt = new RegExp(list.join('|'))
// regEx - /aa|bb|cc|dd/
patt.test(string)
//output true
演示- 使用
new RegExp
动态创建正则表达式 - 检查多个子字符串的存在,我们有
|
操作符在RegEx - 使用
Array.join('|')
动态创建regExp,aa|bb|cc
- 使用
test
函数验证字符串
编辑-对于复杂的情况-问题是列表中的字符串可能必须被转义以使RegEx工作,指出- @GabrielRatener
与我的解决方案相比,@GabrielRatener的解决方案更好
var list = ['aa','bb','cc','dd', 'ab?', '(aa)'];
list = list.sort(function(a, b) {
if (a>b) return -1;
else if (a<b) return 1;
else return 0;
});
list = list.join(" ").replace(/[^'w's]/g, function($1) {
return '''' + $1
}).split(/'s/);
//["dd", "cc", "bb", "ab'?", "aa", "'(aa')"]
//sorting needed to match "ab?" before single "a" as "b" will become optional
//due to "?"
//after processing
var string = "nygaard";
var patt = new RegExp(list.join('|')) // RegExp -> /dd|cc|bb|ab'?|aa|'(aa')/
patt.test(string)
//true
为什么不把你的循环放在你可以调用的函数中呢?
function stringContains(string, list) {
for (var i = 0; i < list.length; i++) {
if( string.indexOf( list[i] ) > -1 )
return true;
}
return false;
}
,然后像这样调用:
var list = ['aa','bb','cc','dd'];
var string = "nygaard";
if(stringContains(string, list))
alert("True");
如果你正在寻找一个javascript库函数,我不相信有一个。
EcmaScript 6提出了一个包含字符串的方法,你可以这样做:
function stringContainsArray(str, array){
for (var i = 0; i < array.length; i++){
if (str.contains(array[i])){
return true;
}
}
return false;
}
var list = ['aa','bb','cc','dd'];
var string = "nygaard"; // true because "aa" is in "nygaard".
console.log(stringContainsArray(list));
// => true
由于在不久的将来,主要浏览器和其他运行时的实现可能仍然不稳定,因此您应该在stringContainsArray函数之前添加以下代码以保持兼容性:
// String.prototype.contains will be implemented in
// the major browsers in the not too distant future
// this will add the same functionality to browsers
// or other runtimes that do not currently support it
if ( !String.prototype.contains ) {
String.prototype.contains = function() {
return String.prototype.indexOf.apply( this, arguments ) !== -1;
};
}
这可能有帮助:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/contains
您还可以扩展字符串原型以获得一个简单的方法:
String.prototype.containsArray = function(array){
return stringContainsArray(this, array);
}
然后你可以简单地做:
"nygaard".containsArray(list);
// => true
相关文章:
- 如何检查两个字符串是否具有相同的字符,包括特殊字符
- 如何在 AngularJS 中检查字符串是否为空
- $.ajax 检查返回字符串是否为“错误”
- 检查字符串是否在字典内的数组中
- 检查字符串是否包含计算
- 验证字符串是否仅包含 javascript 中的某些字符
- 检查字符串是否等于一个单词和一个数字
- 如何检查字符串是否包含非英语字符列表
- 检查字符串是否包含数组中的某个字符串
- 检测字符串是否与格式说明符字符串匹配
- 如何在javascript中测试字符串是否包含带正则表达式的数字
- 如何检查字符串是否为回文JavaScript〔CLOSED!〕
- 检查字符串是否为有效的html标记
- 检查用户输入的字符串是否准确
- Javascript正则表达式,用于检查字符串是否为有效数字
- 使用AngularJS和Angular Translate如何检查字符串是否已被翻译
- If.else语句检查NaN和空字符串是否在JavaScript中不起作用
- Javascript Regex检查字符串是否包含不属于的单词
- 检查长度为5的子字符串是否在另一个字符串中(已重构)
- 如何检查 NS 字符串是否包含 javascript 函数