我正在尝试匹配字符串中的一些单词。但我没有预先确定需要查找的单词数量。
例如,我在 ubuntu-18.10-desktop-amd64.iso.torrent
中搜索 Ubuntu 18 10
将返回 true。
或者我可以在 CentOS-7-x86_64-LiveGNOME-1804.torrent
中搜索 centos 7
也会返回 true。
我不需要检查它是否是小写。
我尝试过:
$.get('interdit', function(data) {
var lines = data.split("\n");
$.each(lines, function(n, data_interdit) {
var url_check = $('textarea#url').val()
var split_forbidden = data_interdit.split(/[\s|,|_|.|-|:]+/);
var exist = 0;
$.each(split_forbidden, function(n, data) {
var n = url_check.search("^("+ data +")");
if(n != -1){
exist = 1
}else{
exist = 0
}
console.log('Forbidden: '+ data + ' Result: ' + n);
})
if(exist == 1){
console.log('found')
}
});
});
文件的示例数据interdit:
CentOS.7
Ubuntu-18
最佳答案
您想要在输入字符串中查找现有单词,而不考虑顺序。为此,您需要使用正向前瞻:
var search = 'Ubuntu 18 10';
var str = 'ubuntu-18.10-desktop-amd64.iso.torrent';
var re = new RegExp('^(?=.*' + search.split(/[\s,_.:-]+/).join(')(?=.*') + ')', 'i')
console.log(re.test(str));
这会生成如下正则表达式(设置了 i
标志):
^(?=.*Ubuntu)(?=.*18)(?=.*10)
关于javascript - 如何创建动态正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53943680/