JS正则表达式的奇怪行为



我需要构建一个正则表达式,将匹配模式,如H10,但不匹配模式,如H10=123(注意:而不是H可能有[A-z],而不是10 -[0-9]+)

这个在regex101.com上工作得很好:

[A-Z]d+[^= ](?!=)
G9=51  // false
H10=10 // false
H10    // true
G0     // true
G0=0   // false

但是在JS中我有以下问题:

'G10'.match(/[A-Z]d+[^= ](?!=)/g) // ['G10']
'G1'.match(/[A-Z]d+[^= ](?!=)/g) // null

问题是,在JS中,由于一个奇怪的原因,这个正则表达式不能捕获只有单个数字的模式,比如G1。如果根据regex101.com,它是一个有效的正则表达式,为什么会发生这种情况?

您被regex101欺骗了,因为您不是针对多个字符串测试regex,而是针对单个多行字符串。将[^= ]替换为[^= n],您将看到差异。

可以使用

/[A-Z]d+(?![=d])/

细节:

  • [A-Z]-大写ASCII字母
  • d+-一个或多个数字
  • (?![=d])-如果当前位置的右边有=或数字字符,则会导致匹配失败。

查看regex演示

相关内容

  • 没有找到相关文章

最新更新