在前端世界里,正则是一种秘而不宣的利器,不可缺少,不可不精。
今天我们来看一下,正则实现更精确的匹配。词语:“花桥镇小学”与“花桥小学”,目的:匹配成功。
如果正则表达式是从用户输入等来源动态地产生,我们就需要使用构造函数来创建正则表达式,而不能使用字面量。
思考:"花桥镇小学"与"花桥小学"是多包含少的关系,且文字顺序必须一致;
以较少的词为必须存在的字符,则正则为:
"花+桥+小+学+"
较多的词存在多余的字符,以\W表示;则正则为:
"花+\W桥+\W小+\W学+\W"
如果输入词为:“花桥镇第一小学”,则字符的个数应该为0个至多个,正则修改为:
"花+\W{0,}桥+\W{0,}小+\W{0,}学+\W{0,}"
//或者
"花+\W*桥+\W*小+\W*学+\W*"
输入词:“花桥镇小学”;
//创建正则字符串
const restr = "花桥小学".split(").map((v) => `${v}+\\W{0,}`).join("");
console.log(restr);
//"花+\W{0,}桥+\W{0,}小+\W{0,}学+\W{0,}"
const re = new RegExp(restr);
console.log(re.test("花桥镇小学")); //true
console.log(re.test("桥花小学")); //false
console.log(re.test("花桥镇第一小学")); //true
注意:在字符串字面量中反斜杠是转义字符,如果将字符串传递为RegExp构造函数,为了在模式中添加一个反斜杠,需要在字符串字面量中转义它。/[a-z]\s/i 和 new RegExp("[a-z]\\s", "i") 创建了相同的正则表达式。[MDN]https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions#special-backslash