如何创建动态RegEx [英] How to creat a dynamic RegEx
问题描述
我正在尝试匹配字符串中的某些单词.但是我没有预定义的单词数.
I'm trying to match some words in a string. But I don't have a predefined number of words I need to find.
例如,我在ubuntu-18.10-desktop-amd64.iso.torrent
中搜索Ubuntu 18 10
会返回true.
For example I search for Ubuntu 18 10
in ubuntu-18.10-desktop-amd64.iso.torrent
would return true.
或者我可以在CentOS-7-x86_64-LiveGNOME-1804.torrent
中搜索centos 7
也会返回true.
Or I could search for centos 7
in CentOS-7-x86_64-LiveGNOME-1804.torrent
would also return true.
我不需要检查它是否是小写字母.
I don't need to check if it's lowercase or not.
我尝试过的事情:
$.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
推荐答案
您想在输入字符串中查找现有单词,而无需考虑顺序.为此,您需要使用正向前行:
You want to look for existing words within the input string without the order being taken into account. You need to use positive lookaheads for this:
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
标志):
This produces a regex as the following (with i
flag set):
^(?=.*Ubuntu)(?=.*18)(?=.*10)
这篇关于如何创建动态RegEx的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!