我有一个文件名,类似于以下内容:
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] : '';
所以:
- 首先,我得到你绳子上的火柴——
.match()
- 然后,您的文件名将不会以数字开头 - 因此请删除
^
- 您忘记了数字的反斜杠:
d
- 不要反斜杠方括号 - 它在这里用作正则表达式标记
- 您的字母不需要
{1}
:方括号内容就足够了,因为它将匹配一个字母,而且只有一个字母。
希望这有帮助!
试试这个模式,\d{5}[a-zA-Z]
试试 - 0?d{5}[azA-Z]
正如你提到的0
可能存在也可能不存在。所以0?
会考虑到这一点。
或者,也可以像这样完成。 可以匹配任何随机字符。
(w+|W+|d+)?d{5}[azA-Z]