我在代码中使用以下正则表达式来验证选项符号:
^([A-Za-z]{1,5}\d? +\b(?<=^.{6}))[0-9]{6}[CcPp][0-9]{8}$
如果您注意到了,我使用的是负向隐式断言来确认先前的匹配只有6个字符。
但是,JScript Regex显然不支持先行查找,但确实支持先行查找。
所以,我认为如果我做类似的事情:
^((?=^.{6})[A-Za-z]{1,5}\d? +\b)[0-9]{6}[CcPp][0-9]{8}$
这会起作用。
但是,它似乎并没有以相同的方式限制它。在第一个示例中,说“我后面的匹配项长6个字符”是很有用的。但是,现在可以预见了,这是行不通的,因为即使不在该第一组中,也会有6个字符匹配。
我正在使用的一些测试用例示例:
Should fail:
1GOOG 12E456C12345678
GOOG 12E456C12345678
GE 4 12E456C12345678
GE4 12E456C12345678
Should pass:
GOOG1 123456C12345678
F5 123456C12345678
我怎样才能成功地将这个lookbehind转换为一个lookahead,以便我可以在javascript中使用这个表达式?
最佳答案
为什么不检查5个字符,然后是一个空格,然后是一个非空格?
(?=.{5}\s\S)
(或在完整模式的背景下...)
^(?=.{5}\s\S)([A-Za-z]{1,5}\d? +\b)[0-9]{6}[CcPp][0-9]{8}$