我需要一些帮助来改进正则表达式! 在 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
与 (1200,627) 我试图改进 reg ex,以防万一有两对以上的数字,以查找以下内容 number(1 digit or more) + whitspace(1 or more) + x (0 or once) + whitspace(1 or more) + number(1 digit or more)
在第二个示例中应该会失败(使用“y”而不是“x”),我认为应该是:
[\d]{1,}[\s]?[x]?[\s]?[\d]{1,}
但是它获取了所有的数字
- DV_Banner_1200 x 627 01.jpg
与 (1200,627,01) 而我只想要前两个数字。我编写的代码只处理前两个,但我想知道我哪里出错了。现在只有 17 级正则表达式向导可以拯救我!谢谢
最佳答案
我用了\d+\s?x?\s?\d+
作为我的正则表达式(同样只是将 +
替换为 {1,}
并删除不必要的 []
)。你可以看到它的结果here .
它匹配 01
的原因是因为所有?
.所以它匹配第一个 /d+
(1 位:0
),然后是 \s
的 0 , 0 个 x
和 \s
中的 0 个其次是 \d+
(另外一位数字:1
)
正则表达式
(\d+)(?:\s?x\s?|\s)(\d+)
应该可以解决问题。 Test it here
(?:...)
是一个非捕获组。因此它允许交替而不为其分配反向引用。这部分匹配两个数字之间的字符(有 x
或 <space>
)。
关于javascript - 正则表达式改进匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25181350/