# 正则表达式的基础 - 正则是什么 - 如何创建一个正则 - 如何学习正则 - 正则的转义 # 1、正则是什么? - 正则:它就是一个规则,用来处理字符串的一个规则(正则就是用来处理字符串的) - 原理: - 1)匹配 判断一个字符串是否符合我们制定的规则->test:reg.test(str) var reg=/\d+/; console.log(reg.test("朱"));//false console.log(reg.test("1"));//true console.log(reg.test(1));//true console.log(reg.test("朱朱朱111"));//true - 2)捕获 把字符串中符合我们正则规则的内容捕获到->exec:reg.exec(str) var reg=/\d+/; console.log(reg.exec("朱"));//null console.log(reg.exec("1"));//["1", index: 0, input: "1"] console.log(reg.exec("朱朱朱111"));//["111", index: 3, input: "朱朱朱111"] 正则捕获,如果比配,返回捕获匹配到了数据;如果不匹配,返回null; # 2、如何创建一个正则? - 字面量方式: var reg = /\d/; - 实例创建方式: var reg = new RegExp(""); **正则的两种创建方式是有区别的**   在字面量方式中,我们//之间包起来的所有的内容都是元字符,有的具有特殊的意义,大部分都是代表本身含义的普通的元字符 var name = "zhuan"; var reg = /^\d+"+name+"\d+$/g; console.log(reg.test("2015zhuan2016"));//->false console.log(reg.test('"2015"""zhuan2016""'));//->false console.log(reg.test('2015"""nameeeee"2016'));//->true **对于这样的需求,我们只能使用实例创建的方式了** var name = "zhuan"; // var reg = /^\d+"+name+"\d+$/g; var reg = new RegExp("^\\d+" + name + "\\d+$", "g"); console.log(reg.test("2015zhuan2016"));//->true console.log(reg.test('2015"""nameeeee"2016'));//->false **字面量方式和实例创建的方式在正则中的区别?** - 1)字面量方式中出现的一切都是元字符,所以不能进行变量值的拼接,而实例创建的正则表达式可以使用变量; - 2)字面量方式中直接写\d就可以,而在实例中需要把它转译 \\d > 要注意的是,传递给 RegExp 构造函数的两个参数都是字符串(不能把正则表达式字面量传递给 RegExp 构造函数)。由于 RegExp 构造 函数的模式参数是字符串,所以在某些情况下要对字符进行双重转义。所有元字符都必须双重转义,那些已经转义过的字符也是如此,例如 \n (字符\在字符串中通常被转义为\\,而在正则表达式字符串中就 会变成\\\\)。 # 3、如何学习正则? var name = "zhuan"; // var reg = /^\d+"+name+"\d+$/g; var reg = new RegExp("^\\d+" + name + "\\d+$", "g"); console.log(reg); console.dir(reg);//顺着原型链查找有哪些方法 console.dir(RegExp.prototype);//正则类的原型 # 4、正则转义 与其他语言中的正则表达式类似,模式中使用的所有元字符都必须转义。正则表达式中的元字符包括: ( [ { \ ^ $ | ) ? * + .]} 这些元字符在正则表达式中都有一或多种特殊用途,因此如果想要匹配字符串中包含的这些字符,就必须对它们进行转义; //匹配第一个"bat"或"cat",不区分大小写 var pattern1 = /[bc]at/i; console.log(pattern1.test("bat")); //true console.log(pattern1.test("cat")); //true console.log(pattern1.test("[bc]at")); //false //匹配第一个" [bc]at",不区分大小写 var pattern2 = /\[bc\]at/i; console.log(pattern2.test("bat")); //false console.log(pattern2.test("cat")); //false console.log(pattern2.test("[bc]at")); //true //匹配所有以"at"结尾的 3 个字符的组合,不区分大小写 var pattern3 = /.at/gi;//注意index的变化 console.log(pattern3.exec("[bc]at")); //["]at", index: 3, input: "[bc]at"] console.log(pattern3.exec("bat")); //null console.log(pattern3.exec("cat")); //["cat", index: 0, input: "cat"] //匹配所有".at",不区分大小写 var pattern4 = /\.at/gi;