【问题标题】:Regex to limit repeating digits正则表达式限制重复数字
【发布时间】:2016-05-12 06:01:04
【问题描述】:

我在 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,}))/ 

这样它就可以按预期工作而无需删除第一对开闭括号。

【问题讨论】:

  • 那些外括号没有任何害处。
  • 嗨,但是当我在 regex101.com 中测试这个正则表达式 /(^(?!.*([0-9])\1{2,}))/ 时,它不能按预期工作对比 /^(?!.*([0-9])\1{2,})/
  • 啊,我明白了,反向引用。因此,只需将\1 替换为\2。试试password.regex = /^(?!.*([0-9])\2{2,})/。所以,你不能把var passRegex = /(${ConfigurationHolder.config.password.regex})/;改成var passRegex = /${ConfigurationHolder.config.password.regex}/;,对吗?
  • 是的。我无法控制代码

标签: javascript regex grails


【解决方案1】:

一个合乎逻辑的解决方案是从您拥有的代码中删除外括号,例如var passRegex = /${ConfigurationHolder.config.password.regex}/;

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

【讨论】:

  • 谢谢。你能解释一下为什么它会“转移”吗?
  • 我不知道您的系统在内部对您定义的正则表达式做了什么。要点是反向引用指向使用特定捕获组捕获的文本。这些组从左到右编号,从 1 开始。因此,您的外括号构成第 1 组,而 [0-9] 周围的括号构成第 2 组。您需要引用第 2 组,因此,\1 必须更改为 @ 987654327@.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多