如何修改空正则表达式使其不匹配任何内容?
解决空正则匹配所有内容的问题
你遇到的问题根源是空字符串生成的正则/(?:)/会匹配任意位置的空字符,所以任何字符串调用match都会返回包含空字符串的数组。要让它返回null,核心是让这个正则变成永远无法匹配任何内容的模式。
这里给两种可行的修改方式:
方式一:提前判断空字符串,替换为永不匹配的正则
直接在生成正则前检查输入是否为空,如果是空字符串,就使用一个不可能匹配的正则(比如/.^/,要求一个字符紧跟行首,这在任何字符串里都不存在):
const emptyText = '' // 空字符串时用/.^/替代,否则用原内容生成正则 const regExp = emptyText ? new RegExp(emptyText) : new RegExp('.^') const result = 'This shouldn\'t match'.match(regExp) console.log(result) // 输出:null
方式二:动态构造正则,添加强制不匹配的条件
如果不想做单独判断,也可以给空字符串对应的正则拼接一个永远不成立的匹配条件,比如正向预查(?!.*)(表示后面没有任何内容,结合空匹配逻辑后就无法匹配任何字符串):
const emptyText = '' // 空字符串时,构造出/(?:)(?!.*),等价于永远不匹配 const regExp = new RegExp(`${emptyText}(?!.*)`) const result = 'This shouldn\'t match'.match(regExp) console.log(result) // 输出:null
两种方式都能实现需求,第一种更直观易懂,第二种适合需要统一正则构造逻辑的场景。
内容的提问来源于stack exchange,提问作者wyc
相关产品推荐
相关产品推荐

