正则匹配正好三个数字?

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

"123" // 返回 123
"123u" // 返回 123
"u123" // 返回 123
"x123y" // 返回 123
"1234" // 返回空
"x1234y" // 返回空
"12" // 返回空
123y456 // 返回 123 和 456

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

阅读 3.7k
2 个回答

根据更新后的条件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]) // 返回空
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏