首页 > 解决方案 > 如何设置正则表达式部分的最大长度?

问题描述

^[A]+(C[A]+)*.....$ 我的表达式末尾的句点是我的正则表达式的延续是否可以在此段(^[A]+(C[A]+)*)上设置最大长度?

谢谢你的任何答案

标签: regex

解决方案


是的,如果您知道在该段之后必须或不应该出现什么,您可以使用积极的前瞻来执行此操作,或者如果支持,您可以使用后瞻。

例如,如果您想将^[A]+(C[A]+)*正则表达式的段限制为 5 个字符,并且确定后面^[A]+(C[A]+)*.....$不能有Aor字符,则可以使用:C

const rx = /^(?=.{1,5}[^AC])[A]+(C[A]+)*.....$/;

console.log(rx.test('AAACAxxxxx'));     // true (5 character segment)
console.log(rx.test('AAAACAxxxxx'));    // false (6 character segment)

console.log(rx.test('AAAAACxxxx')); 
// false (5 character segment, but followed by C)

正向前瞻(?=.{1,5}[^AC])规定该段的长度必须介于15字符之间,并且后跟一个不是Aor的字符C

再次查看上面的最后一个示例,测试返回false但我们希望它返回true,因为'AAAAACxxxx' 匹配模式^[A]+(C[A]+)*.....$并且AAAAA匹配段的子字符串^[A]+(C[A]+)*长度不超过 5 个字符。

为了解决这种边缘情况,我们可以[^AC]在前瞻中替换为,([^AC]|C[^A])这样C只要它后面没有A.

var rx = /^(?=.{1,5}([^AC]|C[^A]))[A]+(C[A]+)*.....$/;

console.log(rx.test('AAAAACxxxx'));    // true

你能想出一个字符串,上面的正则表达式匹配它不应该匹配,或者不匹配它应该匹配吗?


推荐阅读