正则表达式匹配时如何忽略文本中间的短横线(连字符)
正则匹配忽略连字符的两种实现方案
方案1:预处理待匹配文本(最推荐)
直接先把待匹配字符串中所有的连字符删除,再用你原本写的无连字符正则匹配即可,逻辑简单通用,所有编程语言都支持:
- 示例逻辑:
待匹配文本chug-jug→ 替换所有-为空得到chugjug→ 用正则/chugjug/i匹配,匹配成功 - JavaScript示例代码:
const originStr = 'Jack-O'; const targetRegex = /jacko/i; // 先移除所有连字符再匹配 const isMatch = targetRegex.test(originStr.replace(/-/g, '')); // 输出结果为 true
方案2:直接生成适配连字符的正则
如果不允许修改原文本,可以把你要匹配的无连字符字符串,每个字符之间插入-*(表示允许出现0个或多个连字符),生成新的正则直接匹配原文本:
- 示例转换规则:
原匹配关键词ino→ 转换为i-*n-*o→ 最终正则为/i-*n-*o/i,可直接匹配I-no - 动态生成正则的工具函数(JavaScript示例):
function buildHyphenIgnoreRegex(keyword, flags = 'i') { // 先转义正则特殊字符避免报错 const escaped = keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // 每个字符之间插入允许0+连字符的规则 const regexStr = escaped.split('').join('-*'); return new RegExp(regexStr, flags); } // 测试用例 const regex1 = buildHyphenIgnoreRegex('jacko'); console.log(regex1.test('Jack-O')); // true const regex2 = buildHyphenIgnoreRegex('chugjug'); console.log(regex2.test('chug-jug')); // true
内容的提问来源于stack exchange,提问作者tan shi yu
相关产品推荐
相关产品推荐

