首页 > 解决方案 > 正则表达式在最后一场比赛后获得异常

问题描述

我在 javascript 中有这个正则表达式来搜索字符串中的十六进制代码

const regex = /([a-f0-9]{8})/g

这工作正常,但当然它没有得到最后一段十六进制代码,因为它更短,在我的情况下是732e. 我怎么能接近它来寻找最后一行的异常?最后一行和倒数第二行看起来像这样。我想避免失去规则,因为我害怕匹配不是十六进制代码的东西

45270a70 36313837 0a615327 756e6930
34324627 0a703631 38380a61 732e

它是一个二进制文件,它被转换为十六进制代码,然后它被转换为 ASCII,而 ASCII 是我需要匹配的十六进制代码。我这样做了,除了最后一个例外。所以它是垃圾和字符串之间的十六进制代码。

谢谢!

标签: javascriptregex

解决方案


你可以使用这个正则表达式:

/\b[a-f0-9]{4}(?:[a-f0-9]{4}\b|[a-f0-9]{0,4}$)/gi

正则表达式演示

这将允许一行中最后一个字符串的异常仅匹配 4-8 个十六进制数字。对于所有其他情况,它必须仅匹配 8 个十六进制数字。

正则表达式详细信息:

  • \b: 字边界
  • [a-f0-9]{4}: 匹配 4 个十六进制数字
  • (?::启动非捕获组
    • [a-f0-9]{4}: 匹配 4 个十六进制数字
    • \b: 断言单词边界
    • |: 或者
    • [a-f0-9]{0,4}: 匹配 0 到 4 个十六进制数字
    • $: 结尾
  • ):结束非捕获组

推荐阅读