如何在Javascript中匹配正则表达式的确切位数

时间:2016-02-02 22:16:16

标签: javascript regex

在Javascript中,我所做的是以下内容:

var matched = searched.match(/\d{7}/)

如果searched1234567XYZ1234567,则效果很好。两者都返回1234567,这很好。 123XYZ123返回null,这是预期的。

searched12345678XYZ12345678时,有一个条件失败。我希望两者都返回null,因为我寻找一个精确的7位数匹配。他们都返回2345678

/\d{7}$/也不起作用。

有人可以提出建议吗?

谢谢

2 个答案:

答案 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:  []