gpt4 book ai didi

javascript - 如何将这种积极的后向断言转换为前向断言?

转载 作者:行者123 更新时间:2023-12-02 20:35:35 25 4
gpt4 key购买 nike

我在代码中使用以下正则表达式来验证选项符号:

^([A-Za-z]{1,5}\d? +\b(?<=^.{6}))[0-9]{6}[CcPp][0-9]{8}$

如果您注意到,我正在使用否定后向断言来确认上一个匹配项只有 6 个字符。

但是,JScript Regex 显然不支持lookbehinds,但它支持lookahead。

所以,我想如果我做了类似的事情:

^((?=^.{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}$

关于javascript - 如何将这种积极的后向断言转换为前向断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3320370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com