Netbeans中的正则表达式错误在其他编辑器中不存在

Regex error in Netbeans not present in other editors

本文关键字:其他 编辑器 不存在 错误 正则表达式 Netbeans      更新时间:2023-09-26

我有以下正则表达式,它在我的应用程序代码中工作得很好,其他代码编辑器没有报告它的问题。用于验证密码。

/^(?=.*[A-Za-z])+(?=.*['d])+(?=.*[^A-Za-z'd's])+.*$/

也就是说:

必须有一个字母必须是一个数字必须有一个非字母,非数字

现在看来netbeans有一个相当不错的正则表达式解析器,它已经报告了这是一个错误的声明。但由于我是regex的新手,我无法发现错误。这是由于使用正向前看的?=与一个或多个+在最后?

当我拿出+错误消失,但regex停止在我的应用程序执行。

如果有人能告诉我我的表达有什么问题,那就太好了。

该语句用于我使用的jQuery验证插件,如果有帮助的话。另外,由于我使用的是插件,我不希望把它分成几个更小的(显然更简单、更清晰)表达式。这将需要大量的工作。

将量词应用于零宽度断言(例如forward)是没有意义的。这种断言的全部意义在于,它们允许您断言某些条件为真,而不消耗任何文本——也就是说,推进当前匹配位置。一些正则表达式将其视为语法错误,而另一些则有效地忽略了量词。去掉这些加号会使你的正则表达式正确:

/^(?=.*[A-Za-z])(?=.*'d)(?=.*[^A-Za-z'd's]).*$/

如果它不像预期的那样工作,你可能会遇到臭名昭著的IE向前看的错误。通常的解决方法是重新排序,使第一个前瞻性锚定在最后,像这样:

/^(?=.{8,15}$)(?=.*[A-Za-z])(?=.*'d)(?=.*[^A-Za-z'd's]).*/

(?=.{8,15}$)只是一个例子;我不知道你真正的需求是什么。如果您确实想要施加最小和最大长度限制,那么这里是执行此操作的理想位置。