我正在尝试匹配字符串中的某些单词。但是我没有预定义的单词数。
例如,我在Ubuntu 18 10
中搜索ubuntu-18.10-desktop-amd64.iso.torrent
会返回true。
或者我可以在centos 7
中搜索CentOS-7-x86_64-LiveGNOME-1804.torrent
也会返回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
答案 0 :(得分:1)
您想在输入字符串中查找现有单词,而不考虑顺序。为此,您需要使用正向前行:
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)
答案 1 :(得分:1)
“代码给我一个错误jsbin.com/pecoleweyi/2/edit?js,console”
尽管该问题未包括不太可能的输入,例如:*centos 7*
,但添加以下行来转义输入中出现的特殊字符:
var esc = word.replace(/[.*+?^${}()|[\]\\]/gi, '\\$&');
并更改下一行:
var sub = esc.replace(/\s/gi, '.');
下面的演示将:
接受要搜索的字符串(str
)和要在字符串中查找的字符串数组(tgt
)
.map()
数组(tgt
),它将在每个字符串(word
)上运行一个函数
转义任何特殊字符:
var esc = word.replace(/[.*+?^${}()|[\]\\]/gi, '\\$&');
用点(/\s/g
)替换任何空格(.
):
var sub = esc.replace(/\s/g, '.');
然后创建一个RegExp()
对象,以便可以通过模板文字插值(例如快十倍)在模式中插入变量:
var rgx = new RegExp(`${sub}`, `gim`);
使用.test()
来获取布尔值:found = true
/ not found = false
var bool = rgx.test(str);
创建一个对象,以分配搜索字符串:word
作为属性,并分配布尔值:bool
作为其值。
var obj = {
[word]: bool
};
返回一个对象数组:
[{"centos 7":true},{"Ubuntu 18 10":true}]
var str = `ubuntu-18.10-desktop-amd64.iso.torrent
CentOS-7-x86_64-LiveGNOME-1804.torrent`;
var tgt = [`centos 7`, `Ubuntu 18 10`, `corn flakes`, `gnome`, `Red Hat`, `*centos 7*`];
function rgxArray(str, tgt) {
var res = tgt.map(function(word) {
var esc = word.replace(/[.*+?^${}()|[\]\\]/gi, '\\$&');
var sub = esc.replace(/\s/gi, '.');
var rgx = new RegExp(`${sub}`, `gi`);
var bool = rgx.test(str);
var obj = {
[word]: bool
};
return obj;
});
return res;
}
console.log(JSON.stringify(rgxArray(str, tgt)));