.以下正则表达式中的(点)是可选的(?)。
目前每个点都可以设置或不设置。怎么可能做到只要设置了一个点,就必须设置每个点。
/^([\d]{3}).?([\d]{4}).?([\d]{4}).?([\d]{2})$/
最佳答案
您可以在第一个捕获组之后使用带有可选点的捕获组来捕获第一个点(或其缺失),然后使用对该组的 \2
反向引用而不是可选点(请注意,必须对它们进行转义以匹配文字点):
^(\d{3})(\.?)(\d{4})\2(\d{4})\2(\d{2})$
请参阅regex demo .
请注意,原始正则表达式中的捕获组将从第二个正则表达式开始移动一点((\.?)
之后的 (\d{4})
将具有ID 为 3,依此类推)。
详细信息
^
- 字符串开头(\d{3})
- 第 1 组:三位数字(\.?)
- 第 2 组:一个或零个点(\d{4})
- 第 3 组:四位数字\2
- 对第 2 组值的反向引用(.
或空字符串(\d{4})
- 第 4 组:四位数字\2
- 对第 2 组值的反向引用(\d{2})
- 第 5 组:两位数字$
- 字符串结尾。
关于正则表达式:设置时可选的字符(点),它必须位于字符串集中的任何位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48271726/