Javascript 正则表达式改进匹配
我需要一些帮助来改进正则表达式! 在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,以防有
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
[\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是的,这也是非常好的一点。使用此表单是实现以下目标的第一步