如何用正则校验目标字符首次出现后后续字符均为该目标字符
正则实现方案
你需要的正则可以直接按照你描述的规则构造:整个字符串由「0n个非目标字符」+「0n个目标字符」组成,实现代码如下:
// 先实现正则特殊字符转义,避免目标字符是.、*等元字符时匹配异常 const escapeRegExp = (char) => char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const validate = (string, targetChar) => { const escapedTarget = escapeRegExp(targetChar); const reg = new RegExp(`^[^${escapedTarget}]*${escapedTarget}*$`); return reg.test(string); };
正则逻辑说明
^匹配字符串起始位置,确保从开头就符合规则[^${escapedTarget}]*匹配0个或任意多个不等于目标字符的字符,对应你定义的第一部分子串${escapedTarget}*匹配0个或任意多个目标字符,对应你定义的第二部分子串$匹配字符串结束位置,确保末尾没有其他非目标字符
测试验证
以目标字符为.为例,所有测试用例匹配结果完全符合预期:
- 空字符串、"2"、"."、"2.."、"...." 均匹配返回true
- "..2"、"2.2"、"2.2." 均不匹配返回false
效率优势
该实现只需要一次正则匹配即可完成校验,相比原实现的多次字符串切割、统计操作,性能更好,代码也更简洁。
内容的提问来源于stack exchange,提问作者Gergő Horváth
相关产品推荐
相关产品推荐

