javascript - 正则表达式关键字匹配

标签 javascript regex pattern-matching

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

这是我现在的位置:

\b(smart.*\bwork.*|work.*\bsmart.*)
  • 匹配"trying to work smarter"
  • 但不是"trying to work" or "trying to be smart"

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

所以问题是:

  1. 是否有一种简单的仅使用正则表达式的方法? (即"\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]] )

更新

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

最佳答案

我的 friend 胡安的答案将非常有效,除非用户正在寻找可能出现在较大单词中的小单词。在这种情况下,您需要退回到正则表达式。您可以使用混合方法,仅在找到字符串时才使用 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;
        });
    }
}

从未测试过,尤其是 escapeRe 位。

关于javascript - 正则表达式关键字匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4466707/

相关文章:

javascript - 如何修复未定义的 "react-dom.development.js:287 Uncaught TypeError: Cannot read property ' setState'

javascript - 拖放指令 - IE 中未触发事件

javascript - iPhone : Fast Forward & Rewind using HTML5 <audio> & playbackRate doesn't work?

regex - 似乎无法让 RegEx 匹配

javascript - 从父级获取部分类名并应用于子级 JQuery

javascript - knockout.js:在 observableArray 上没有连接

Python,正则表达式 : Place list of strings in regex

javascript - regex/instr javascript函数来检查url

rust - 是否可以在模式中创建可变引用的可变值?

java - 使用 Pattern 和 Matcher 类在 java 中模式匹配 grant 语句