我想在 javascript 中实现一个正则表达式匹配函数,用于匹配文本中的一个或多个关键字。每个关键字都必须以任意顺序找到。关键字由用户输入。
这是我现在的位置:
\b(smart.*\bwork.*|work.*\bsmart.*)
- 匹配
"trying to work smarter"
- 但不是
"trying to work" or "trying to be smart"
这种方法的问题是我必须创建关键字集的不同有序排列(无论如何)。
所以问题是:
- 是否有一种简单的仅使用正则表达式的方法? (即
"\b(smart.*|work.*)<magic:all,anyorder>"
什么将确保找到所有关键字,并且以任何顺序) - 如果没有 - 你能否建议一个数组排列的 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/