正则探秘

在前端世界里,正则是一种秘而不宣的利器,不可缺少,不可不精。

今天我们来看一下,正则实现更精确的匹配。词语:“花桥镇小学”与“花桥小学”,目的:匹配成功。
如果正则表达式是从用户输入等来源动态地产生,我们就需要使用构造函数来创建正则表达式,而不能使用字面量。
思考:"花桥镇小学"与"花桥小学"是多包含少的关系,且文字顺序必须一致;
以较少的词为必须存在的字符,则正则为:

"花+桥+小+学+"

较多的词存在多余的字符,以\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/inew RegExp("[a-z]\\s", "i") 创建了相同的正则表达式。[MDN]https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions#special-backslash

你可能感兴趣的:(正则探秘)