如何从Array构建正则表达式OR选项

时间:2015-12-09 18:31:04

标签: javascript regex

我是Regex的新手,我想做的是以下内容。

说我有一个关键字数组:

// the kwd is changed dynamically
var kwd = ["key1", "key2", "key3", "key4"];

我需要构建一个Regex来测试一个字符串是否包含该数组中的任何关键字。我想知道如何动态生成该Regex表达式?

可能是一个功能:

function RegexBuilder(kwd){
    // I know I can use brutal force to search one by one, 
    // but I just need to know how to generate that regex?
    return regex_expression;
}

2 个答案:

答案 0 :(得分:1)

我假设键内部不应该有任何特殊的字符,这将使这个更复杂的解决方案。

function RegexBuilder(kwd){
var regex_expression = '(' + kwd.join('|').replace(/([^\w\d\s|])/gm,'\\$1') + ')';
return regex_expression;
}

你可以这样使用

var regex = new RegExp(RegexBuilder(kwd));
if(mytext.match(regex)) // do something

答案 1 :(得分:1)

这应该这样做。 constructor for the RegExp object可用于从字符串而不是文字构建RegExp。

function RegexBuilder(kwd){
    kwd.forEach(function(e,i,a){
        a[i] = e.replace(/[()^|$[\]*.\\?{}]/g, "\\$&");
    });
    regex_expression = new RegExp(kwd.join('|'));
    return regex_expression;
}

https://regex101.com/r/vE0cI0/1