一.什么是正则表达式
正则表达式也被称为规则表达式,它是由一些普通字符和特殊字符(元字符)构成的表达式。作用是用来验证字符串是否符合格式要求,另外它也可以用来判断字符串中是否包含指定格式的子串
二、如何创建正则表达式
- 方式1:利用构造方法创建正则表达式,格式:var 正则表达式名称 = new RegExp(‘模式’,‘修饰符’);
- 方式2:利用字面量的形式创建正则表达式,格式:var 正则表达式名称 = /模式/修饰符;
- 两种方式的区别
- 如果使用构造方法创建正则表达式,可以在构造方法中使用变量,而字面量形式创建的正则表达式不可以使用变量
- 在构造方法中如果使用转义字符,那么需要使用两条反斜线,如果是字面量形式则只需一条反斜线
三、正则表达式对象常用方法——test方法
- 作用:test方法是正则表达式对象的一个方法,该方法的作用是判断字符串是否符合正则表达式的格式要求
- 格式:正则表达式对象.test(‘字符串’);
- 返回值:true(符合格式要求)、false(不符合格式要求)
四、正则表达式的构成
- 普通字符:a-z、0-9
- 特殊字符(元字符): 如/ \ . * | ? + [ ] ( ) { } ^ $这些符号在正则表达式中都是具有特殊功能和含义的。在使用时不能把它们当做普通字符来使用,如果要把他们当做普通字符,需要将它进行转义、即在它的前面加反斜线
- 定位符
- ^:表示以某个字符开头,如^a,表示以a开头
- ,表示以a结尾
- 注意:^和$可以同时存在,如果同时存在,在匹配时不仅要匹配格式内容,也要匹配字符的数量
- 表示数量的限定符
- *:表示它前面的字符最少0个最多任意个,如/a*/表示字符串中包含0到多个字符a
- +:表示它前面的字符最少1个最多任意个,如/a+/表示字符串中包含1到多个字符a
- ?:表示它前面的字符最少0个,最多1个,如/a?/表示字符串中包含0到1个字符a
- {n}:表示它前面的字符有n个,如/a{3}/表示字符串中包含3个字符a
- {n,}:表示它前面的字符最少n个,最多无限,如/a{3,}/表示字符串中包含3到任意多个字符a
- {n,m}:表示它前面的字符最少为n个,最多为m个,如/a{3,6}/表示字符串中包含3到6个字符a
- 转义字符
- \d:表示所有数字,注意使用构造方法创建正则表达式时,转义字符的反斜线应该写两条即new RegExp(“\d”)表示包含任意数字
- \D:表示所有非数字
- \w:表示字母、数字、下划线
- \W:表示除字母、数字、下划线以外的内容
- \s:表示空白符(空格、制表符等)
- \S:表示非空白符
- .:代表除\n外的所有字符
- 备选字符集[]:包含如下常用形式
- [值1值2值3]表示值1,值2,值3中的任意一个字符,如[12345]表示12345中的任意字符
- [值1-值2]表示值1到值2间的任意一个字符,[1-5]表示数字1-5间的任意一个字符
- [^值1值2值3]表示值1,值2,值3以外的字符
- [\u4e00-\u9fa5] 表示任意一个汉字
- 选择和分组
- |:表示或,如/^a{3}/.test("aaa")
- ():表示分组,如var reg = /^(123){2}$/;
五、字符串对象中和正则表达式能够结合使用的方法
- split方法
- 作用:将字符串转化为数组
- 格式:字符串.split(‘分隔符’);
- 分隔符说明: 如果省略分隔符,会将这个字符串作为一个数组元素放在数组中 如果要将字符串中的每个字符变为数组元素,可以用“空字符串”作为分隔符 分隔符也可以是正则表达式,如str.split(/\d/);
- match方法
- 作用:该方法的作用是是在字符串中查找符合指定条件的子串,返回值为所有找到的子串形成的数组。默认情况下,match方法在查找时,当找到符合条件的第一个子串后就停止查找。如果想让match将这个字符串都检索完,可以结合正则表达式的修饰符g(全局匹配)
- 格式:字符串.match(要查找的子串);
- replace方法
- 作用:替换字符串中的某些字符
- 格式:字符串.replace(要被换掉的字符,新的字符);
- 注意:该方法在执行时,默认情况下只会替换掉符合条件的第一个字符,如果要让它将所有符合条件的字符替换,可以和正则表达式结合使用,而且这个正则表达式需要设置全局匹配的修饰符g。注意它的返回值为替换后的新的字符串,原串不会被改变
- search方法
- 作用:类似于indexOf方法,作用是查找字符串中某个字符的下标,不同点在于indexOf不可以和正则表达式结合使用,而search可以和正则表达式结合使用
- 格式:字符串.search();
- 注意:search方法在查找到第一个符合条件的字符则停止查找,就算正则表达式中添加了g修饰符也不会支持全局匹配
六、正则表达式中常用的修饰符
- i:表示忽略大小写
- g:表示全局匹配
- 注意:i和g可以同时使用,格式如:var reg = /a/gi;
七、正则表达式中的匹配模式:贪婪模式、懒惰模式
- 贪婪模式:默认,即尽可能多的匹配到字符。在正则表达式中有表示数量的特殊符号,如*+?{n,m},默认情况下这些符号在匹配时都会尽可能多的去匹配字符,即取数量的上限
- 懒惰模式:尽可能少的匹配到字符,即在匹配时取数量词的下限,问题是如何将贪婪模式转化为懒惰模式,就是在数量词的后面加?
八、正则表达式对象常用方法——exec方法
- exec方法
- 作用:在字符串中查找是否包含符合条件的子串,如果包含将这个子串返回
- 格式:正则表达式对象.exec(字符串);
- 返回值:查找到的子串形成的数组
- 注意:exec方法和g修饰符结合使用时无效,如果要向后匹配,可以在调用exec