Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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_Regex - Fatal编程技术网

Javascript 正则表达式改进匹配

Javascript 正则表达式改进匹配,javascript,regex,Javascript,Regex,我需要一些帮助来改进正则表达式! 在JavaScript中,我有一个正则表达式,它在文件名中查找成对的数字 var nums = str.match(/[\d]{1,}[\d]{1,}/gi); 这将匹配 DV_Banner_1200x627.jpg DV_Banner_1200y627.jpg DV_Banner_1200 x 627.jpg DV_Banner_1200 x627.jpg DV_Banner_1200 627.jpg 有(1200627) 我试图改进reg-ex,以防有

我需要一些帮助来改进正则表达式! 在JavaScript中,我有一个正则表达式,它在文件名中查找成对的数字

var nums = str.match(/[\d]{1,}[\d]{1,}/gi);
这将匹配

  • DV_Banner_1200x627.jpg
  • DV_Banner_1200y627.jpg
  • DV_Banner_1200 x 627.jpg
  • DV_Banner_1200 x627.jpg
  • DV_Banner_1200 627.jpg
有(1200627) 我试图改进reg-ex,以防有两对以上的数字,以查找以下内容 数字(1位或以上)+whitspace(1位或以上)+x(零位或一次)+whitspace(1位或以上)+数字(1位或以上)

在第二个示例中,它应该失败(在“x”上使用“y”而不是“y”),我认为是:

[\d]{1,}[\s]?[x]?[\s]?[\d]{1,}
但它抓住了所有的数字

  • DV_Banner_1200 x 627 01.jpg

使用(1200627,01),而我只需要前两个数字。我编写的代码只处理前两个问题,但我想知道哪里出了问题。现在只有17级正则表达式向导才能救我!谢谢

请尝试使用以下正则表达式:

(\d+)(?:(?: ?x ?)| )(\d+)

我使用
\d+\s?x?\s?\d+
作为我的正则表达式(同样的事情只是替换
+
作为
{1,}
并删除不必要的
[]
)。你可以看到它的结果

它与
01
匹配的原因是所有
。因此,它匹配的是第一个
/d+/code>(1位:
0
),然后是
\s
中的0位,
x
中的0位,以及
\s
中的0位,然后是
\d+/code>(另1位:
1

正则表达式

(\d+)(?:\s?x\s?|\s)(\d+)
我们应该做到这一点

(?:…)
是非捕获组。因此,它允许在不为其分配反向引用的情况下进行替换。这部分匹配两个数字之间的字符(要么有一个
x
或一个
)。

您说您希望在“x”之间有“一个或多个”空白字符,但您使用了
量词,表示“零或一”。因此,由于您还将“x”标记为可选,因此它将匹配任何两个或两个以上的数字:您的第一个
[\d]{1,}
将与
0
匹配,然后您的第二个将与
1
匹配

请注意,您不需要将单个原子包含在字符范围内:
[\d]
可以更简单地写成
\d
。另外,
{1,}
——意思是“一个或多个”——更容易编码为
+

由于您希望在“x”的两侧都有“一个或多个”空白字符,因此我建议:

\d+(?:(?:\s+x\s+)|\s+)\d+
请注意,
(?:…)
是一个“非捕获组”,因此这些位不会构成匹配数组的一部分。但是,我认为您不需要“一个或多个”空白字符,因为这与您的第一个示例不匹配。相反,请尝试以下方法:

\d+(?:(?:\s*x\s*)|\s+)\d+

其中,
*
量词表示“零或更多”。

关系不大,但可以稍微提高正则表达式的可读性。不需要用
[]
包围
\d
。而且
{1,}
可以表示为
+
,因此
[\d]{1,}[\d]{1,}
可以重写为
\d+\d+
@Pshemo:和
\d+\d+
——至少两个数字——反过来,可以有效地写为
\d\d+
\d{2,}
@Jongware是的,这也是非常好的一点。使用此表单是实现以下目标的第一步