正则表达式关键字匹配

Mux*_*uxa 0 javascript regex pattern-matching

我想在javascript中实现一个匹配文本中一个或多个关键字的正则表达式匹配函数.每个关键字都必须以任何顺序找到.关键字由用户输入.

这是我在的地方:

\b(smart.*\bwork.*|work.*\bsmart.*)
Run Code Online (Sandbox Code Playgroud)
  • 火柴 "trying to work smarter"
  • 但不是 "trying to work" or "trying to be smart"

这种方法的问题是我必须创建关键字集的不同有序排列(无论如何).

所以问题是:

  1. 如果只有简单的RegEx方式?(即"\b(smart.*|work.*)<magic:all,anyorder>"什么将确保找到所有关键字,并以任何顺序)
  2. 如果没有 - 你能建议一个javascript实现的数组排列(以便从中[1,2,3]生成[[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]])

UPDATE

这旨在用于在客户端(在浏览器中)搜索一组字符串(10-50个字符串).

Hem*_*ock 5

除非用户正在寻找可能出现在较大单词中的小词,否则我的朋友Juan的答案将会很好.在这种情况下,您需要回退到正则表达式.您可以使用仅在找到字符串时使用RE的混合方法.就像是:

String.prototype.containsAll = function(){
    for (var i=0; i < arguments.length; i++) {

        if (this.indexOf( arguments[i] ) > -1 ) {
            // test with regular expressions
            var re = new RegExp('\\b' + escapeRe(arguments[i]) + '\\b')  
            if (!re.test(this)) {
                return false;
            }
        } else {
            return false
        }
    }
    return true;

    function escapeRe(re) {
        return re.replace(/[$.*+?()\[\]\\^]/g, function(chr) {
            return '\\' + chr;
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

从未测试过,尤其不是escapeRe位.