2016-05-12 82 views
1

我有一个Grails配置限制的重复位的正则表达式:正则表达式以限制重复的数字

password.regex = /^(?!.*([0-9])\1{2,})/ 

能正常工作时,我测试此在https://regex101.com/。不过,这并不在我们的JS代码,因为它修改了正则表达式的工作:

var passRegex = /(${ConfigurationHolder.config.password.regex})/; 

所以结果是这样的,而不是:

/(^(?!.*([0-9])\1{2,}))/ 

不幸的是,我不能改变的js代码,所以我只会依赖修改配置。有人可以帮我修改这个表达式

/(^(?!.*([0-9])\1{2,}))/ 

使预期不除去第一对开启和关闭括号它会奏效。

+0

那些外括号不会造成任何伤害。 –

+0

嗨,但是当我在regex101.com上测试这个正则表达式/(((((!!.*([0-9])\1{2,}))/时,它并不像预期的那样工作,与/ ^(?! 。*([0-9])\ 1 {2,})/ – SpongebobJunior

+0

啊,我明白了,反向引用。所以,只需用'\ 2'替换'\ 1'。尝试'password.regex =/^(?!。*([0-9])\ 2 {2,})/'。所以,你不能把'var passRegex = /($ {ConfigurationHolder.config.password.regex})/;'改成'var passRegex =/$ {ConfigurationHolder.config.password.regex} /;',可以吗? –

回答

1

逻辑的解决办法是从你的代码删除外括号,像var passRegex = /${ConfigurationHolder.config.password.regex}/;

如果它不是一个选项,只需将\1替换为\2作为具有要检查的位数的组会被移位并获取新的ID = 2,password.regex = /^(?!.*([0-9])\2{2,})/

+0

谢谢。你能解释为什么它会“转移”吗? – SpongebobJunior

+0

我不知道你的系统在内部对你定义的正则表达式有什么作用。重点在于反向引用指向使用特定捕获组捕获的文本。这些组从左到右编号,从1开始。所以,你的外括弧形成组1,围绕'[0-9]'的括号形成组2.你需要引用组2,所以'1'必须改为'\ 2'。 –