正则表达式的一些知识点

273 阅读6分钟

一.什么是正则表达式

正则表达式也被称为规则表达式,它是由一些普通字符和特殊字符(元字符)构成的表达式。作用是用来验证字符串是否符合格式要求,另外它也可以用来判断字符串中是否包含指定格式的子串

二、如何创建正则表达式

  1. 方式1:利用构造方法创建正则表达式,格式:var 正则表达式名称 = new RegExp(‘模式’,‘修饰符’);
  2. 方式2:利用字面量的形式创建正则表达式,格式:var 正则表达式名称 = /模式/修饰符;
  3. 两种方式的区别
  1. 如果使用构造方法创建正则表达式,可以在构造方法中使用变量,而字面量形式创建的正则表达式不可以使用变量
  2. 在构造方法中如果使用转义字符,那么需要使用两条反斜线,如果是字面量形式则只需一条反斜线

三、正则表达式对象常用方法——test方法

  1. 作用:test方法是正则表达式对象的一个方法,该方法的作用是判断字符串是否符合正则表达式的格式要求
  2. 格式:正则表达式对象.test(‘字符串’);
  3. 返回值:true(符合格式要求)、false(不符合格式要求)

四、正则表达式的构成

  1. 普通字符:a-z、0-9
  2. 特殊字符(元字符): 如/ \ . * | ? + [ ] ( ) { } ^ $这些符号在正则表达式中都是具有特殊功能和含义的。在使用时不能把它们当做普通字符来使用,如果要把他们当做普通字符,需要将它进行转义、即在它的前面加反斜线
  3. 定位符
  1. ^:表示以某个字符开头,如^a,表示以a开头
  2. :表示以某个字符结尾,如a:表示以某个字符结尾,如a,表示以a结尾
  3. 注意:^和$可以同时存在,如果同时存在,在匹配时不仅要匹配格式内容,也要匹配字符的数量
  1. 表示数量的限定符
  1. *:表示它前面的字符最少0个最多任意个,如/a*/表示字符串中包含0到多个字符a
  2. +:表示它前面的字符最少1个最多任意个,如/a+/表示字符串中包含1到多个字符a
  3. ?:表示它前面的字符最少0个,最多1个,如/a?/表示字符串中包含0到1个字符a
  4. {n}:表示它前面的字符有n个,如/a{3}/表示字符串中包含3个字符a
  5. {n,}:表示它前面的字符最少n个,最多无限,如/a{3,}/表示字符串中包含3到任意多个字符a
  6. {n,m}:表示它前面的字符最少为n个,最多为m个,如/a{3,6}/表示字符串中包含3到6个字符a
  1. 转义字符
  1. \d:表示所有数字,注意使用构造方法创建正则表达式时,转义字符的反斜线应该写两条即new RegExp(“\d”)表示包含任意数字
  2. \D:表示所有非数字
  3. \w:表示字母、数字、下划线
  4. \W:表示除字母、数字、下划线以外的内容
  5. \s:表示空白符(空格、制表符等)
  6. \S:表示非空白符
  7. .:代表除\n外的所有字符
  1. 备选字符集[]:包含如下常用形式
  1. [值1值2值3]表示值1,值2,值3中的任意一个字符,如[12345]表示12345中的任意字符
  2. [值1-值2]表示值1到值2间的任意一个字符,[1-5]表示数字1-5间的任意一个字符
  3. [^值1值2值3]表示值1,值2,值3以外的字符
  4. [\u4e00-\u9fa5] 表示任意一个汉字
  1. 选择和分组
  1. |:表示或,如/^a{3}b3|^b{3}/.test("aaa")
  2. ():表示分组,如var reg = /^(123){2}$/;

五、字符串对象中和正则表达式能够结合使用的方法

  1. split方法
  1. 作用:将字符串转化为数组
  2. 格式:字符串.split(‘分隔符’);
  3. 分隔符说明:  如果省略分隔符,会将这个字符串作为一个数组元素放在数组中  如果要将字符串中的每个字符变为数组元素,可以用“空字符串”作为分隔符  分隔符也可以是正则表达式,如str.split(/\d/);
  1. match方法
  1. 作用:该方法的作用是是在字符串中查找符合指定条件的子串,返回值为所有找到的子串形成的数组。默认情况下,match方法在查找时,当找到符合条件的第一个子串后就停止查找。如果想让match将这个字符串都检索完,可以结合正则表达式的修饰符g(全局匹配)
  2. 格式:字符串.match(要查找的子串);
  1. replace方法
  1. 作用:替换字符串中的某些字符
  2. 格式:字符串.replace(要被换掉的字符,新的字符);
  3. 注意:该方法在执行时,默认情况下只会替换掉符合条件的第一个字符,如果要让它将所有符合条件的字符替换,可以和正则表达式结合使用,而且这个正则表达式需要设置全局匹配的修饰符g。注意它的返回值为替换后的新的字符串,原串不会被改变
  1. search方法
  1. 作用:类似于indexOf方法,作用是查找字符串中某个字符的下标,不同点在于indexOf不可以和正则表达式结合使用,而search可以和正则表达式结合使用
  2. 格式:字符串.search();
  3. 注意:search方法在查找到第一个符合条件的字符则停止查找,就算正则表达式中添加了g修饰符也不会支持全局匹配

六、正则表达式中常用的修饰符

  1. i:表示忽略大小写
  2. g:表示全局匹配
  3. 注意:i和g可以同时使用,格式如:var reg = /a/gi;

七、正则表达式中的匹配模式:贪婪模式、懒惰模式

  1. 贪婪模式:默认,即尽可能多的匹配到字符。在正则表达式中有表示数量的特殊符号,如*+?{n,m},默认情况下这些符号在匹配时都会尽可能多的去匹配字符,即取数量的上限
  2. 懒惰模式:尽可能少的匹配到字符,即在匹配时取数量词的下限,问题是如何将贪婪模式转化为懒惰模式,就是在数量词的后面加?

八、正则表达式对象常用方法——exec方法

  1. exec方法
  1. 作用:在字符串中查找是否包含符合条件的子串,如果包含将这个子串返回
  2. 格式:正则表达式对象.exec(字符串);
  3. 返回值:查找到的子串形成的数组
  4. 注意:exec方法和g修饰符结合使用时无效,如果要向后匹配,可以在调用exec