JavaScript Regex全部来自Array

时间:2014-03-31 15:31:34

标签: 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'));

http://jsfiddle.net/duDP9/1/

5 个答案:

答案 0 :(得分:4)

像这样使用RegExp

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

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

答案 1 :(得分:1)

您需要使用new RegExp(..., 'g')

将字符串转换为正则表达式
console.log(str.match(new RegExp(searchTerms.join('|'), 'g')));

答案 2 :(得分:1)

如果您想从字符串中动态创建RegExp对象,则需要使用constructor

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" ]

答案 3 :(得分:1)

您还可以使用Array.reduce()以及Str.indexOf,如果找不到字符串,则返回-1

var searchTerms = ['dog', 'cat'];
var str = 'I have a dog and a cat';
searchTerms.reduce(function(prev, curr) { return prev && str.indexOf(curr) !== -1 });
// true
str = 'I only have a dog';
searchTerms.reduce(function(prev, curr) { return prev && str.indexOf(curr) !== -1 });
// false

prev是一个累加器,只要找到数组的所有元素,它就会保持true

使用此方法优于正则表达式的优势在于searchTerms中的字符以不正常的方式被解释的可能性较小。

答案 4 :(得分:0)

您要做的是(option1|option2|...|optionN)注意括号的语法,我不认为您已添加它们。

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