javascript - 正则表达式改进匹配

标签 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

与 (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/

相关文章:

javascript - 在 Javascript 中为 document.getElementById 创建别名

c++ - 如何编写基于某些条件识别字符串中所选 float 或整数的C++正则表达式?

Javascript、事件、事件监听器和内存泄漏

javascript - 如何跟踪 ASP.NET 中的复选框更改?

javascript - 如何使用 javascript 中的正则表达式解决 "invalid quantifier"错误?

正则表达式表现得很懒惰,应该是贪婪的

regex - 使用正则表达式查找 PHP anchor 之间的特定匹配

jquery - 正则表达式自定义表单验证匹配 "[hello.world]"内的单词

javascript - 使固定的 div 保持水平固定

javascript - 将具有循环结构的JS对象存储在本地存储上,并在重载时获取循环结构