JQuery 匹配与正则表达式不起作用



我有一个文件名,类似于以下内容:

Annual-GDS-Valuation-30th-Dec-2016-082564K.docx

它将包含 5 个数字,后跟一个字母,但它可能位于文件名中的不同位置。前导零可能存在,也可能不存在,但这不是必需的。

这是我在检查示例后想出的代码,但是SelectedFileClientID总是null

var SelectedFileClientID = files.match(/^d{5}[a-zA-Z]{1}$/);

不确定我做错了什么。

编辑:

0与我尝试提取的代码无关。它可能在那里,也可能不存在,它甚至可能是一个完全不同的角色,或者不止一个,但与它完全无关。客户决定要在那里放置其他字符。

你的正则表达式至少有 3 个问题:1) 模式用锚点括起来,因此需要完整的字符串匹配,2) d匹配一个字母d,而不是一个数字,你需要d来匹配一个数字,3) 一个[匹配一个文字[,所以字符类被破坏了。

/d{5}[a-zA-Z]/

详情

  • d{5} - 5 位数字
  • [a-zA-Z] - 一个 ASCII 字母

JS演示:

var s = 'Annual-GDS-Valuation-30th-Dec-2016-082564K.docx';
var m = s.match(/d{5}[a-zA-Z]/);
console.log(m[0]);

好吧,有一些事情不对劲...

var matches = files.match(/-0?(d{5}[a-zA-Z]).[a-z]{3,}$/);
var SelectedFileClientID = matches ? matches[1] : '';

所以:

  1. 首先,我得到你绳子上的火柴——.match()
  2. 然后,您的文件名将不会以数字开头 - 因此请删除^
  3. 您忘记了数字的反斜杠:d
  4. 不要反斜杠方括号 - 它在这里用作正则表达式标记
  5. 您的字母不需要{1}:方括号内容就足够了,因为它将匹配一个字母,而且只有一个字母。

希望这有帮助!

试试这个模式,\d{5}[a-zA-Z]

试试 - 0?d{5}[azA-Z]正如你提到的0可能存在也可能不存在。所以0?会考虑到这一点。

或者,也可以像这样完成。 可以匹配任何随机字符。

(w+|W+|d+)?d{5}[azA-Z]

最新更新