Javascript 正则表达式:如何确定字符串是否包含给定子字符串的整个集合?
假设我有一个子字符串数组“['abcd'、'xyz'、'091823'、'9-+$\u35;$*”。如何使用regex确保给定字符串包含所有这些内容?尝试使用lookarounds:Javascript 正则表达式:如何确定字符串是否包含给定子字符串的整个集合?,javascript,regex,Javascript,Regex,假设我有一个子字符串数组“['abcd'、'xyz'、'091823'、'9-+$\u35;$*”。如何使用regex确保给定字符串包含所有这些内容?尝试使用lookarounds: /(?=.*abcd)(?=.*xyz)(?=.*091823)(?=.*9-\+#\$_#\$\*)/ 对于任何要测试的字符串数组的一般情况: function containsAll(str, arrayOfStr) { return new RegExp(arrayOfStr.map(function
/(?=.*abcd)(?=.*xyz)(?=.*091823)(?=.*9-\+#\$_#\$\*)/
对于任何要测试的字符串数组的一般情况:
function containsAll(str, arrayOfStr) {
return new RegExp(arrayOfStr.map(function (s) {
return '(?=.*' + s.replace(/([-\\[\]{}.^$+*()|?])/g, '\\$1') + ')';
}).join('')).test(str);
}
containsAll(str, ['abcd', 'xyz', '091823', '9-+#$_#$*']);
听起来您想要获取一个搜索词的动态数组,并检查另一个字符串是否包含所有搜索词。我认为你不会找到一个只有正则表达式的解决方案;你应该循环浏览这些术语,并逐一检查。此外,如果术语是动态的,您可能不想使用正则表达式,除非您知道它们不需要清理(例如,“9-+$\\\\$\\\\$*”包含特殊的正则表达式字符) 以下是一个示例解决方案:
var terms=['abcd'、'xyz'、'091823'、'9-+$\u35$*'];
var测试={
成功:“abcd 091823 xyz 9-+$\\\\$*”,
失败:“abcd 091823 xyz”
}
var testKeys=Object.keys(测试);
for(测试键的var测试){
var pass=真;
for(var期限){
if(测试[test].indexOf(项)=-1){
通过=错误;
打破
}
}
document.body.innerHTML+=`${test}:${pass}
`
}
谈到ES6,您可以在不使用正则表达式的情况下使用方法:
//当'str'不包含所有子字符串时
var str='这里没有所需的子字符串';
结果=['abcd'、'xyz'、'091823'、'9-+$\\\\\\\\$*']。每个(函数(e){
返回str.includes(e);
});
控制台日志(结果)代码>所有这些字符?@WiktorStribiżew:对此稍作解释会有帮助。@WiktorStribiżew:我理解你的正则表达式,但它与问题有什么关系?问题本身并不清楚,因为OP谈论的是一个字符串中的那些字符或模式。@WiktorStribiżew我不认为这回答了如何测试给定字符串是否包含数组中的所有字符串的问题。我想我的答案对这个字符串数组是这样的。对于任何子字符串数组,t都是一个更复杂的问题,需要转义元字符,但我不确定Alan是否在问这个问题。