如何编写匹配特定模式且最大长度为12的正则表达式?
正则表达式修正方案
首先,你的正则存在几个关键问题:
- 错误使用了HTML转义字符
&,应直接写& - 给固定常量
{value}添加了+修饰符,这会强制匹配{value}重复多次,不符合需求 - 整体分组重复的逻辑完全错误,你需要的是前后可加任意数量允许的特殊字符,而非整个模式重复0-12次
- 没有正确限制整个字符串的总长度≤12
正确的正则写法
假设{value}是你的固定常量字符串(比如"target"),正则应该这样写:
/^(?=.{0,12}$)[$%&*\n\s]*{value}[$%&*\n\s]*$/
各部分解释
(?=.{0,12}$):正向预查,确保整个字符串的长度在0到12之间(因为必须包含{value},实际有效长度范围是{value}的长度到12)[$%&*\n\s]*:匹配0个或多个允许的特殊字符,包括$、%、&、*、换行符\n、空格{value}:直接写入你的固定常量字符串(如果{value}包含正则特殊字符,比如$、*,需要用\转义,例如\$test\*)
适配示例场景
比如你的{value}是"demo"(长度4),前后特殊字符总长度最多为8,这个正则会正确匹配:
####demo(4个特殊字符+demo,总长度8≤12)###demo#(3+1=4个特殊字符,总长度8≤12)demo\n####(demo+换行+4个特殊字符,总长度4+1+4=9≤12)
注意事项
如果{value}本身的长度超过12,那么不存在符合条件的字符串,正则也无法匹配任何结果。
内容的提问来源于stack exchange,提问作者Shahir Abdullah
相关产品推荐
相关产品推荐

