我希望识别十六进制字符串的部分。
所以如果你考虑字符串
CHICKENORBEEFPIE,比赛将是BEEF。
为此,我想出了这个表达式/[A-F0-9]{2,}(?![^A-F0-9])/g
这完美无缺 - 除了它只匹配BEE,而不是BEEF。除非BEEF碰巧在字符串的末尾。
答案 0 :(得分:0)
否定前瞻(?![^A-F0-9])
表示:不匹配除A-F,0-9以外的任何字符后面的任何内容。其转换为匹配模式,然后是A-F,0-9。你的正则表达式匹配' BEE'因为它后跟F,满足条件。
如果要识别两个或多个十六进制代码的序列,只需完全消除负向前瞻。
/[A-F0-9]{2,}/g
转换为:查找尽可能多的匹配项,由A-F或0-9组成的模式,长度为2个或更多字符。
答案 1 :(得分:0)
这是因为正则表达式的最后一部分:(?![^A-F0-9])
因此,您匹配任何未跟随非十六进制字符的字符串...这最终意味着找到下一个字符 十六进制字符的字符串。
您可以删除^
或完全删除整个部分,因为没有必要。以下内容将检索您要查找的内容:/[A-F0-9]{2,}/g
答案 2 :(得分:0)
[A-F0-9]{2,}(?![A-F0-9])
会匹配预期,但负面预测是多余的,因为默认情况下量词是贪婪的。
[A-F0-9]{2,}(?![^A-F0-9])
不起作用,因为断言是跟随字符必须不是任何字符,除了 A-F0-9(双重否定)
F
中的最后一个字符BEEF
不匹配的原因是,在匹配BEEF
后,否定前瞻失败P
位于[^A-F0-9]
中回溯到BEE
成功,因为F
不在[^A-F0-9]
。
答案 3 :(得分:0)
如果您需要基于配对的值的给定结果,您可以使用/([A-F0-9]{2})+/g
,如果不是(如果它是否奇怪无关紧要),您可以使用/[A-F0-9]{2,}/g
。
希望它有所帮助。
答案 4 :(得分:-1)
使用
/ [A-F0-9] {2,}(?![^ A-F0-9])* /克