在Javascript中,我所做的是以下内容:
var matched = searched.match(/\d{7}/)
如果searched
为1234567
或XYZ1234567
,则效果很好。两者都返回1234567
,这很好。 123
和XYZ123
返回null,这是预期的。
但searched
为12345678
或XYZ12345678
时,有一个条件失败。我希望两者都返回null,因为我寻找一个精确的7位数匹配。他们都返回2345678
。
/\d{7}$/
也不起作用。
有人可以提出建议吗?
谢谢
答案 0 :(得分:3)
(?:\D|^)
:以非数字
(?:\D|$)
:以非数字
var matched = searched.match(/(?:\D|^)(\d{7})(?:\D|$)/);
if (matched) {
matched = matched[1];
}
答案 1 :(得分:2)
您可以使用基于环视的正则表达式。自2020年6月30日以来,Firefox supports lookbehinds in regexps在浏览器中的落后应用正在迅速发展。
使用
/(?<!\d)\d{7}(?!\d)/
或者,要查找所有出现的情况,
/(?<!\d)\d{7}(?!\d)/g
请参见regex demo
后面的(?<!\d)
负向匹配项不紧跟数字之后,\d{7}
匹配七个数字,(?!\d)
负向查找不需要在右边立即输入数字。
const values = ['1234567A', 'XYZ1234567A', '12345678', 'XYZ12345678'];
const regex = /(?<!\d)\d{7}(?!\d)/g;
for (let val of values) {
console.log(val, '\nMatch found:',
/(?<!\d)\d{7}(?!\d)/.test(val), '\nMatch value: ',
Array.from(val.matchAll(regex), m => m[0])
)
}
输出:
1234567A
Match found: true
Match value: [
"1234567"
]
XYZ1234567A
Match found: true
Match value: [
"1234567"
]
12345678
Match found: false
Match value: []
XYZ12345678
Match found: false
Match value: []