js中的正则表达式

244 阅读3分钟

正则表达式有两种创建方式

  1. 通过正则的构造函数创建对象
var reg1 =  new RegExp(/\d{5}/);
console.log(reg1.test("我的编号是89757"));
//输出:true
  1. 通过字面量的方式创建
var reg2 = /\d{5}/;
console.log(reg1.test("我的编号是89757"));
//输出:true

注意:正则表达式的写法也有两种,一种是字符串形式,不过要注意转义符号“\”,一种是用“//”包含

1、var reg = /\d{5}/;
2、var reg = “\\d{5}”;

正则表达式的元字符:

  1. .:表示的是除\n以外,任意的一个字符
  2. []:表示的是范围,比如:
    • [1-7] 表示的是1到7之间的任意的一个数字
    • [a-z] 表示的是:所有的小写的字母中的任意的一个
    • [A-Z] 表示的是:所有的大写的字母中的任意的一个
    • [a-zA-Z] 表示的是:所有的字母的任意的一个
    • [0-9a-zA-Z] 表示的是: 所有的数字或者是字母中的一个 注意:[]中出现的元字符是没有其意义的,如[.]:表示范围就是一个.,而不是除\n以外任意的一个字符
  3. |:表示或
  4. ():表示分组或提升优先级
    • ([0-9])([1-5])([a-z]) 三组
    • (()(())) 从最左边开始计算,最左边的做括号优先级最高
    • [0-9]|([a-z])|[A-Z] 先计算(a-z)

限定符,也是元字符的一部分

  1. *:表示的是:前面的表达式出现了0次到多次,如:[a-z][0-9]*:表示0-9出现一次到多次
  2. +:表示前面的表达式出现了1次到多次
  3. ?:表示前面的表达式出现了0次到1次
  4. {}:表示前面的表达式出现的次数,如:
    • {0,} 表示的是前面的表达式出现了0次到多次,和 *一样的
    • {1,} 表示的是前面的表达式出现了1次到多次,和 +一样的
    • {0,1} 表示的是前面的表达式出现了0次到1次,和 ?一样的
    • {5,10} 表示的是前面的表达式出现了5次到10次
    • {4} 前面的表达式出现了4次
    • {,10} 错误的写法。。。。。。。
  5. ^: 表示的是以什么开始,或者是取非(取反),比如:^[0-9] 表示以数字开头,而[^0-9]表示非数字
    • ^[a-z] 以小写字母开始
    • [^0-9] 取反,非数字
    • [^a-z] 非小写字母
    • [^0-9a-zA-Z_] 特殊符号,和\W一样
  6. $:表示的是以什么结束,比如:[0-9][a-z]$ 必须以小写字母结束
  7. \d:数字中的任意一个
  8. \D 非数字中的一个
  9. \s 空白符中的一个
  10. \S 非空白符
  11. \w 非特殊符号
  12. \W 特殊符号
  13. \b 单词的边界

正则表达式中的模式

  1. 严格模式:^$组合,如:
    • [a-z][0-9]:只要字符串中含有这个模式的就符合,如:a9,aa99,asd9,ca1
    • ^[a-z][0-9]$:严格模式下只能是:a9,b1,c3

注意:正则表达式一般情况下都是非严格模式,即只要字符串中有符合正则表达式规则的,则匹配正确,要想使用严格模式,得以^开头,&结尾

  1. 全局模式:在/表达式/g,如:
var str = "abcbd";
console.log(str.replace(/b/,"e"));
//输出:aecbd //一般情况下,只会找到第一个符合的字符进行修改
console.log(str.replace(/b/g,"e"));
//输出:aeced //全局模式,把所有符合的字符进行修改
  1. 不分大小写模式:在/表达式/i,如:
var str = "aBcbdBeb";
console.log(str.replace(/b/ig,"e"));
//输出:aecedeee