Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式匹配数组中的所有_Javascript_Regex - Fatal编程技术网

JavaScript正则表达式匹配数组中的所有

JavaScript正则表达式匹配数组中的所有,javascript,regex,Javascript,Regex,我试图搜索一个字符串,并从一个数组中同时找到多个匹配项 我用“|”加入了我的数组项,但得到了null var searchTerms = ['dog', 'cat']; var str = 'I have a dog and a cat'; // want to return matches for both dog and cat console.log(str.match('/' + searchTerms.join('|') + '/g')); 您需要使用newregexp(…,'g'

我试图搜索一个字符串,并从一个数组中同时找到多个匹配项

我用
“|”
加入了我的数组项,但得到了
null

var searchTerms = ['dog', 'cat'];
var str = 'I have a dog and a cat';

// want to return matches for both dog and cat
console.log(str.match('/' + searchTerms.join('|') + '/g'));

您需要使用
newregexp(…,'g')将字符串转换为正则表达式。


你想做的语法是
(option1 | option2 | |…| optionN)
注意括号,我认为你没有添加它们


尝试使用:
console.log(str.match('/('+searchTerms.join('|')+')/g')

像这样使用
RegExp

var searchTerms = ['dog', 'cat'];
var str = 'I have a dog and a cat';

console.log(str.match(new RegExp(searchTerms.join('|'), 'g')));

如果要从字符串动态创建对象,则需要使用:

然而,我通常会推荐一些其他的方法。如果搜索词包含特殊的正则表达式字符(例如,
$
),则此操作可能会失败。当然,你可以避开那些特殊的角色,但如果可能的话,我还是建议你寻找其他的解决方案

很难说解决方案会是什么样子,因为我不知道完整的用例,但这里有一个非常简单的替代解决方案示例:

var str = 'I have a dog and a cat';
var searchTerms = {'dog': 1, 'cat': 1};
console.log(str.split(/\s+/).filter(function(x) { return x in searchTerms; }));
// [ "dog", "cat" ]
如果找不到字符串,还可以使用,以及返回
-1

var searchTerms = ['dog', 'cat'];
var str = 'I have a dog and a cat';
searchTerms.every(search => str.indexOf(search) !== -1);
// true
str = 'I only have a dog';
searchTerms.every(search => str.indexOf(search) !== -1);
// false
Array.each
返回
true
如果回调为数组的每个元素返回
true


与正则表达式相比,使用此方法的优点是
searchTerms
中的字符以意外方式解释的可能性较小。

对于me@user3448187,
“/”+
应删除。我更新了答案。请再检查一遍。您能否就“其他方法”提出建议:D@user3448187请参阅我的更新答案,以获取替代答案。非常非常有趣。如果字符串很长,你会说正则表达式更快吗?@user3448187嗯,它可能更快,也可能更慢。这取决于很多因素。在任何情况下,如果它真的很长,我可能会尝试在服务器上做很多这样的处理,可能会有一些像感谢!没那么长,我只是因为一些奇怪的原因对表演有点偏执我会继续挖来挖去,把绳子断成几个字
var str = 'I have a dog and a cat';
var searchTerms = {'dog': 1, 'cat': 1};
console.log(str.split(/\s+/).filter(function(x) { return x in searchTerms; }));
// [ "dog", "cat" ]
var searchTerms = ['dog', 'cat'];
var str = 'I have a dog and a cat';
searchTerms.every(search => str.indexOf(search) !== -1);
// true
str = 'I only have a dog';
searchTerms.every(search => str.indexOf(search) !== -1);
// false