正则表达式改进匹配
Regex improvement match
我需要一些帮助来改进正则表达式!在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 627.
- DV_Banner_1200 jpg
(1200年,627年)我试图改进正则表达式,只是以防有两对以上的数字,寻找以下内容数字(1位或以上)+空格(1位或以上)+ x(0或一次)+空格(1位或以上)+数字(1位或以上)
应该在第二个例子中失败(在'x'上使用'y'),我认为应该是:
['d]{1,}['s]?[x]?['s]?['d]{1,}
但是它会抓取
中的所有数字- DV_Banner_1200 x 62701 .jpg
with(1200,627,01),而我只想要前两个数字。我编写的代码只处理前两个,但我想知道我哪里出错了。现在只有17级的正则表达式巫师才能救我!由于
我使用'd+'s?x?'s?'d+
作为我的正则表达式(同样的事情只是替换+
为{1,}
和删除不必要的[]
)。你可以在这里看到它的结果。
之所以匹配01
是因为所有的?
。所以它匹配第一个/d+
(1位数字:0
),然后是's
的0,x
的0,'s
的0,然后是'd+
(另一个1位数字:1
)
('d+)(?:'s?x's?|'s)('d+)
就可以了。在这里测试
(?:...)
为非捕获组。所以它允许在不给它分配反向引用的情况下进行改变。这部分匹配两个数字之间的字符(x
或<space>
)。
试试下面的regex:
('d+)(?:(?: ?x ?)| )('d+)
演示您说希望在"x"之间有"一个或多个"空白字符,但是您使用了?
量词,这意味着" 0或1 "。因此,由于您还将"x"标记为可选的,因此它将匹配任何两位或两位以上的数字:您的第一个['d]{1,}
将匹配0
,然后您的第二个1
将匹配。
注意,您不需要将单个原子括在一个字符范围内:['d]
可以更简单地写成'd
。另外,{1,}
——意思是"一个或多个"——更容易编码为+
。
如果你想在"x"的两边有"一个或多个"空白字符,我会用:
'd+(?:(?:'s+x's+)|'s+)'d+
注意(?: ... )
是一个"非捕获组",所以这些位不会构成你的匹配数组的一部分。但是,我认为您不需要"一个或多个"空白字符,因为这与您的第一个示例不匹配。相反,试着这样做:
'd+(?:(?:'s*x's*)|'s+)'d+
其中*
量词表示"零或多"
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用正则表达式捕获“”并分割成阵列
- 将这些正则表达式从javascript转换为Java
- 用于验证JS中逻辑运算符表达式的正则表达式