JavaScript中匹配字符串重复字符均为偶数次的正则表达式
正则表达式匹配Y/M/D(区分大小写)连续出现次数均为偶数的字符串
需求实现正则
使用以下正则表达式可满足需求,匹配所有Y、y、M、m、D、d的连续出现次数均为偶数的字符串:
^(?:(?:[Yy]{2}|[Mm]{2}|[Dd]{2})|[^YyMmDd])*$
正则解释
^和$:锚定字符串开头与结尾,确保匹配范围覆盖整个字符串(?: ... )*:非捕获组,允许组内内容重复零次或多次(?:[Yy]{2}|[Mm]{2}|[Dd]{2}):匹配成对出现的Y/y、M/m、D/d(连续2次,满足偶数次要求)|[^YyMmDd]:匹配任何不属于Y/y/M/m/D/d的字符(比如示例中的-,不影响校验逻辑)
示例验证
- 符合要求的字符串
YYMMDD-YYYY-DD:正则匹配成功,返回true - 不符合要求的字符串
YYMDD:存在单个M(连续出现1次,属于奇数),正则匹配失败,返回false
原尝试正则的问题
你之前使用的/M{2,}/这类正则逻辑完全错误:
{2,}表示匹配2次及以上的连续字符,但无法限制奇数次数的连续字符(比如单个M、3个M都不会被该正则捕获,反而会误判符合要求的字符串)- 你的逻辑是“存在2次及以上的连续字符就执行操作”,和需求“所有连续出现次数均为偶数”完全相悖
内容的提问来源于stack exchange,提问作者unknown
相关产品推荐
相关产品推荐

