如何编写正则表达式匹配字符间含任意空白的指定字符串
匹配含任意空白间隔的指定字符串正则方案
针对你需要匹配固定字符串(比如BRB),允许字符间有任意空白、忽略大小写,同时排除无关匹配的需求,直接给你可复用的正则写法和思路:
核心正则模板(以BRB为例)
/\b(?:B\s*R\s*B)\b/i
各部分解释
\b:单词边界,确保匹配的内容是独立片段,不会和其他字母粘连(比如避免把"BRBe"或"xyzBRB"误判为匹配,同时排除像"What be right b means?"里的单个b)B\s*R\s*B:把目标字符串的每个字符拆开,中间插入\s*——\s匹配任意空白字符(空格、制表符等),*表示允许0个或多个空白,完美满足"字符间可加任意空白"的需求i:忽略大小写修饰符,不管是全大写、全小写还是混合大小写(比如brb、BRb、bRb)都能匹配
测试验证(对应你的例子)
- 匹配成功的情况:
- "What b r b means?" → 符合b(空白)r(空白)b的顺序,忽略大小写后匹配
- "What BR b means?" → BR(空白)b,顺序正确
- "what brb means?" → 无空白的完整字符串,
\s*允许0个空白,匹配
- 匹配失败的情况:
- "What be right b means?" → 只有单个b,没有中间的R,不符合顺序,不匹配
扩展:允许连字符等其他分隔符
如果需要像你的例子里"What BR-b means?"这种连字符分隔的情况也能匹配,把\s*改成[\s-]*即可,正则变为:
/\b(?:B[\s-]*R[\s-]*B)\b/i
[\s-]表示匹配空白字符或连字符,*同样允许0个或多个。
通用化方法
不管你的目标字符串是什么,都可以套用这个模板:
- 把目标字符串的每个字符单独拆出来
- 在每两个字符之间插入
\s*(或[\s-]*) - 前后加上
\b,最后加上忽略大小写修饰符
比如目标是"LOL",正则就是:/\b(?:L\s*O\s*L)\b/i
内容的提问来源于stack exchange,提问作者alseczg
相关产品推荐
相关产品推荐

