jQuery实现从字符串中提取MAC地址并按需格式化替换的方法
带分隔符MAC地址匹配实现方案
核心用正则表达式实现即可,匹配逻辑完全覆盖位置、空白、分隔符相关要求,不需要逐字符遍历解析,性能和准确率都能满足前端输入场景的需求。
匹配规则前置约束
写匹配逻辑前先明确合法边界,避免漏判、误判:
- 合法MAC地址共12个十六进制字符,范围是
0-9、a-f、A-F,大小写不敏感 - 带分隔符的格式为6组2位十六进制字符,组间用统一的
:或-分隔,共5个分隔符,不允许两种分隔符混用 - MAC地址可能出现在字符串开头、中间、结尾任意位置,前后可能存在空白字符,但不能和其他字母、数字、分隔符直接相连(避免把长字符串里的片段误判为MAC)
- 匹配结果只保留MAC地址本身,不携带前后的空白字符
可用正则表达式
直接使用以下正则做全局匹配即可:
/(?<![:\-\w])((?:[0-9a-fA-F]{2}(:|-))(?:[0-9a-fA-F]{2}\2){4}[0-9a-fA-F]{2})(?![:\-\w])/g
正则逻辑拆解:
- 前后的负向断言用于过滤非法边界:如果MAC地址前后直接连着字母、数字、冒号、横杠,就判定为不合法,不做匹配
- 捕获第一组分隔符(
:或-)后,通过反向引用\2要求后续所有分隔符和第一个保持一致,自动过滤分隔符混用的非法格式- 第一个捕获组的返回值就是纯MAC地址字符串,不会携带前后空白
- 没有加首尾锚点,支持匹配字符串任意位置的MAC地址
前端实现示例(JavaScript)
// userInput 为用户输入的原始字符串 const userInput = "This is a string containing 00:12:34:56:78:90 within it." const macMatchReg = /(?<![:\-\w])((?:[0-9a-fA-F]{2}(:|-))(?:[0-9a-fA-F]{2}\2){4}[0-9a-fA-F]{2})(?![:\-\w])/g // 提取所有匹配到的合法MAC地址,存入数组 const matchedMacList = [...userInput.matchAll(macMatchReg)].map(matchItem => matchItem[1]) // 后续可直接遍历matchedMacList,完成弹窗确认、格式化、替换逻辑
边界场景测试参考
上线前可以用以下用例验证匹配准确性:
- 字符串开头带MAC:
00-12-34-56-78-90 test content可正常匹配 - 字符串结尾带MAC:
test content 00:1A:2B:3C:4D:5E可正常匹配 - MAC前后带空白:
aa:bb:cc:dd:ee:ff匹配结果为aa:bb:cc:dd:ee:ff,无多余空白 - 分隔符混用:
00:12-34:56-78:90不会被匹配 - MAC前后连其他字符:
x00:12:34:56:78:90、00:12:34:56:78:90z不会被匹配 - 大小写混合:
00:aB:cD:12:34:5F可正常匹配
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

