Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按顺序匹配字符串_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 按顺序匹配字符串

Javascript 按顺序匹配字符串,javascript,jquery,regex,Javascript,Jquery,Regex,我做了一个正则表达式,但我不能使它符合顺序 var$result=[]; var url_check=“CentOS-7-x86_64-LiveGNOME-1804”; var torrent_forbidden=[“CentOS-7 live”、“CentOS 7 livegnome”、“Cent-7”、“OS Cent-7”、“CentOS:7”、“CentOS word:7”、“CentOS:6”、“cento 7 s”]; 每个(torrent\u禁止,函数(索引,torrent\u禁

我做了一个正则表达式,但我不能使它符合顺序

var$result=[];
var url_check=“CentOS-7-x86_64-LiveGNOME-1804”;
var torrent_forbidden=[“CentOS-7 live”、“CentOS 7 livegnome”、“Cent-7”、“OS Cent-7”、“CentOS:7”、“CentOS word:7”、“CentOS:6”、“cento 7 s”];
每个(torrent\u禁止,函数(索引,torrent\u禁止){
var regex=new RegExp(“^(?=.*?”+torrent\u禁止。替换(/[.*+?^${}()\[\\\]\]/g,\\$&')。拆分(/\?[\s,\.::.*-]+/)。连接(“)(?=.*?)+”,“gi”);
if(正则表达式测试(url\u检查)==true){
$result.push(torrent_违禁+':true');
}否则{
$result.push(torrent_违禁+':false');
}
});
console.log($result)

您正在从字符串创建正则表达式,如搜索给定单词的
^(?=.*CentOS)(?=.*7)(?=.*live)
。它缺少一些限制,例如:

  • 这个词后面只能跟
    -
    (或其他分隔符)或字符串结尾
  • 这个单词应该在字符串的开头或
    -
    之后(或其他分隔符)
因此,您需要创建前瞻性,如:

(?=^(.*separators)?someword(separators|$))  
而不是:

(?=.*?someword)
(对于作为分隔符的
-
,它应该是:
(?=^(.*[-])?someword([-]|$)

var$result=[];
var url_check=“CentOS-7-x86_64-LiveGNOME-1804”;
var torrent_forbidden=[“CentOS-7 live”、“CentOS 7 livegnome”、“CentOS-7”、“CentOS:7”、“CentOS word:7”、“CentOS:6”、“CentOS 7 s”、“entOS-7”、“CentOS*”;
每个(torrent\u禁止,函数(索引,torrent\u禁止){
var regexstr='^(?=^(.[-])?'+torrent\u禁止。替换(/[.+?^${}()|[\\\]\]/g,\\$&')。拆分(/\?[\s,\...*-]+/)。加入([-]\$)(?=^(.[-])+'([-].[-])+)+'([-]-]);
console.log(regexstr)
var regex=newregexp(regexstr,'gi');
if(正则表达式测试(url\u检查)==true){
$result.push(torrent_违禁+':true');
}否则{
$result.push(torrent_违禁+':false');
}
});
console.log($result)

这是一个解决方案,它可能并不完美,但您应该更加精确地确定您的需求,因为在某些情况下它会失败。正则表达式将测试单词是否有序并由分隔符分隔(如果不是在开头或结尾)。它将匹配整个单词(
x86
将被检测到,但不会
x8
)。在指定的词之间可以有单词。一些解释:

  • 正面的头像不会消耗角色,所以我不认为你可以将它们结合起来保证一个订单,我只保证它们会在之后出现
  • 如果从字符串构建RegExp,则应使用双转义
    \\
  • 无需使用
    filter
    执行另一个
    replace
    (它在重复文章中)->编辑:还原,因为它还有另一个功能:删除空字符串
  • 您可以使用
    ?:
    为未捕获的备选方案创建一个组,或者如果您想量化一个组
  • 如果你对正则表达式还有其他问题,尽管问
var$result=[];
var url_check=“CentOS-7-x86_64-LiveGNOME-1804”;
var torrent_forbidden=[“CentOS-7 live”、“CentOS 7 livegnome”、“CentOS-7”、“CentOS:7”、“CentOS word:7”、“CentOS:6”、“CentOS 7 s”、“CentOS x86”、“CentOS x8”、“*CentOS*”];
每个(torrent\u禁止,函数(索引,torrent\u禁止){
var regexstr='(?:^ |[\\s,.:*-])+torrent\u禁止
.replace(/[.*+?^${}()|[\]\\]/g,'\\$&'))
.split(/\\?[\s,\.:*-]+/)
.filter(函数(e){返回e.replace(/(\r\n |\n |\r)/gm,“”;})
.join(“(?:(?:[\\s,.:*-][^\\s,.:*-]+)+)?[\\s,.:*-]')+”(?:[\\s,.:*-].$);
console.log(regexstr);//调试正则表达式
var regex=newregexp(regexstr,'gi');
if(正则表达式测试(url\u检查)==true){
$result.push(torrent_违禁+':true');
}否则{
$result.push(torrent_违禁+':false');
}
});
console.log($result)

这是原始字符串这不符合我的要求为什么你认为
centos:7
是真的?你看到你正在创建的正则表达式了吗?我不明白为什么希望在该字符串中找到
centos:7
,也许您应该设置一些要求,并创建适当的正则表达式。这是背后的逻辑:
centos 7 livegnome:true“
?@zer00ne string”centos-7-x86_64-livegnome-1804”包含单词“centos”、“7”和“livegnome”(不区分大小写)小问题,如果我像
entOS-7
那样搜索,它将是true@executable似乎fine@executable首先创建字符串,然后将其传递给
RegExp
,这样您就可以调试它并查看它包含的内容。非常感谢您的回答!我会做一些测试。如果我的搜索值类似于
*centos,我发现了一个问题*
。我想这是因为我们没有删除空字符串,并且
过滤器
函数更正了问题。如果您是对的,我恢复了过滤器。我觉得奇怪的是,它应该是一个积极的结果,因为它在开始时有
*
,而文件在
CentOS
之前没有任何内容,但这需要进行更改在Account中,我认为这是因为它没有逃逸,所以它破坏了正则表达式。所以我们不能按照文件名的顺序检测?