我需要构造一个正则表达式,它将匹配像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?
1条答案
按热度按时间92dk7w1h1#
你被regex 101欺骗了,因为你不是针对多个字符串测试正则表达式,而是针对单个多行字符串。用
[^= \n]
替换[^= ]
,你会看到区别。你可以用
[A-Z]
-大写ASCII字母\d+
-一个或多个数字(?![=\d])
-如果当前位置右侧有=
或数字字符,则匹配失败的负前瞻。请参见regex demo。