是否可使用正则表达式替代判断子串顺序的if条件语句
正则实现方案
是可以用正则简化这个判断逻辑的,核心思路是构造匹配「a字符串 + 任意字符 + b字符串」的规则,同时要注意先对a、b中的正则特殊元字符做转义,避免匹配逻辑出错。
实现代码
var a = '**'; var b = '##'; var phrase = '**Lorem ipsum dolor sit amet##'; // 转义正则特殊字符的工具方法 function escapeRegExp(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } // 构造正则:匹配a出现在b前面的情况 const reg = new RegExp(`${escapeRegExp(a)}.*${escapeRegExp(b)}`); if (reg.test(phrase)) { // 你的原有逻辑 }
说明
- 这个正则的匹配逻辑和你原来的三个判断完全等价:只要
reg.test(phrase)返回true,就说明phrase同时包含a和b,且a的出现位置在b之前。 - 必须加转义逻辑的原因是你的例子中a是
**,*属于正则的特殊量词,如果不转义直接拼到正则里会触发正则的量词匹配逻辑,得到错误结果。 - 如果a、b都是固定的普通字符串(没有正则特殊字符),也可以直接写死正则,比如你这个例子可以直接写成
/\*\*.*##/.test(phrase)。
内容的提问来源于stack exchange,提问作者DAbuzied
相关产品推荐
相关产品推荐

