我需要构建一个正则表达式,将匹配模式,如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演示