求助:匹配含空格、跨行的异常格式十六进制字符串的正则表达式
匹配带空格/跨多行的0x开头40位十六进制字符串的正则方案
直接上能满足需求的正则表达式:
/0x(?:\s*[a-fA-F0-9]){40}/gms
正则说明
0x:锁定目标字符串的固定前缀,彻底避免误匹配类似acce这类无前缀的零散字符(?:\s*[a-fA-F0-9]){40}:非捕获组重复40次,确保最终捕获到恰好40个十六进制字符:\s*:匹配任意数量的空白字符(包括空格、换行、制表符),兼容字符串内有空格或跨多行的情况[a-fA-F0-9]:匹配单个十六进制字符(大小写兼容)
- 模式修饰符:
g:全局匹配,一次性找出文本中所有符合条件的字符串m:多行模式,配合换行场景使用s:让\s能匹配换行符,确保跨多行的字符串也能被完整捕获
测试验证
- 正常无空格场景:
0x0D6185e7481968D82B51F07191F8dAa721b2Db10→ 完整匹配 - 含空格场景:
0x0 D6185 e7481968D82B51F07191F8 dAa721b2Db10→ 忽略中间空格,匹配整个目标字符串 - 跨多行场景:
→ 精准捕获从access 0x0D6185e7481968 D82B51F07191F8d Aa721b2Db100x开始到最后一个十六进制字符的全部内容,无视换行 - 误匹配规避:文本中的
access不会被触发匹配,因为缺少0x前缀
额外处理
如果需要提取纯十六进制字符(去掉所有空白符),可以在匹配后通过字符串替换处理:
const matchStr = '0x0 D6185 e7481968D82B51F07191F8 dAa721b2Db10'; const pureHex = matchStr.replace(/\s/g, ''); // 结果:0x0D6185e7481968D82B51F07191F8dAa721b2Db10
内容的提问来源于stack exchange,提问作者Matéo
相关产品推荐
相关产品推荐

