如何从数组中构建regex OR选项



我对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;
}

应该这样做。RegExp对象的构造函数可以用于从字符串而不是文本构建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

我认为键中不应该有任何特殊的字符,这将使这个解决方案更加复杂。

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

你可以这样使用

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

最新更新