regex JS正则表达式的奇怪行为

5w9g7ksd  于 2023-03-31  发布在  其他
关注(0)|答案(1)|浏览(128)

我需要构造一个正则表达式,它将匹配像H10这样的模式,但不匹配像H10=123这样的模式(注意:代替H,可以有[A-z],代替10 -[0-9]+
这一个在www.example.com上工作得很好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?

92dk7w1h

92dk7w1h1#

你被regex 101欺骗了,因为你不是针对多个字符串测试正则表达式,而是针对单个多行字符串。用[^= \n]替换[^= ],你会看到区别。
你可以用

/[A-Z]\d+(?![=\d])/
  • 详细信息 *:
  • [A-Z]-大写ASCII字母
  • \d+-一个或多个数字
  • (?![=\d])-如果当前位置右侧有=或数字字符,则匹配失败的负前瞻。

请参见regex demo

相关问题