正则匹配正好三个数字?

正则匹配正好三个数字?

只能匹配到正好三个连续的数字,少一个数字或者多一个都不可以。比如,

"123" // 返回 123

"123u" // 返回 123

"u123" // 返回 123

"x123y" // 返回 123

"1234" // 返回空

"x1234y" // 返回空

"12" // 返回空

123y456 // 返回 123 和 456

正则怎么实现啊?我写的 "[^0-9]*[0-9]{3}[^0-9]*" 不对,实在想不出了,有大兄弟支支招么?


回答:

根据更新后的条件Python、多组数字),答案更改为:

import re

data = [

'123',

'123u',

'u123',

'x123y',

'1234',

'x1234y',

'12',

'123y456',

]

for s in data:

print(re.findall(r'(?<!\d)(\d{3})(?!\d)', s))

输出:

['123']

['123']

['123']

['123']

[]

[]

[]

['123', '456']


这样?

['123', '123u', 'u123', 'x123y', '1234', '12'].map(s => s.match(/^\D*(\d{3})\D*$/)?.[1])

输出:

['123', '123', '123', '123', undefined, undefined]


回答:

使用非数字或边界限制

const re = /(?:\D|\b)(\d{3})(?:\D|\b)/

console.log("123".match(re)?.[1]) // 返回 123

console.log("123u".match(re)?.[1]) // 返回 123

console.log("u123".match(re)?.[1]) // 返回 123

console.log("x123y".match(re)?.[1]) // 返回 123

console.log("1234".match(re)?.[1]) // 返回空

console.log("12".match(re)?.[1]) // 返回空

以上是 正则匹配正好三个数字? 的全部内容, 来源链接: utcz.com/p/938635.html

回到顶部