像注册电子邮件,有格式,可以用人来查看,但是申请的太多加上人一段时间看的有限,这个肯定是效率极低的,但是我们计算机又不认识

所以出现了正则表达式规则

  • 计算机可以根据正则表达式,来检查一个字符是否符合规范
  • 获取将字符串中符合规则的内容提取出来

创建正则表达式的对象

  1. //创建正则表达式的对象
  2. //语法
  3. //var 变量 = new RegExp("正则表达式","匹配模式")
  4. //在构造函数中可以传递一个匹配模式作为第二个参数
  5. //i: 忽略大小写
  6. //g: 全局匹配模式
  7. var reg = new RegExp("a")
  8. console.log(reg)//'/a/'就是创建好的正则表达式

类型是

  1. console.log(typeof reg)//object

正则表达式方法

test

使用这个方法可以用来检查一个字符串是否符合正则表达式的规则。如果符合则返回**true**,否则返回**false**

  1. var str = "a"
  2. var result = reg.test(str)
  3. console.log(result)//a: true ,除a任何值都为false;有a就是true
  1. var reg = new RegExp("a","i");
  2. var str = "Abc"
  3. var result = reg.test(str)
  4. console.log(result)

使用字面量来创建正则表达式

语法: **var 变量 = /正则表达式/匹配模式**

  1. reg = /a/i;
  2. var str = "Abc"
  3. var result = reg.test(str)
  4. console.log(result)
  • 使用字面量的方式创建更加简单
  • 使用构造函数创建更加灵活

创建一个正则表达式,检查一个字符串中是否有a或b

  1. reg = /a|b/;//使用'|'表示或者的意思
  2. var str1 = "cd"
  3. var str2 = "ac"
  4. var str3 = "bv"
  5. var result1 = reg.test(str1)
  6. var result2 = reg.test(str2)
  7. var result3 = reg.test(str3)
  8. console.log(result1)//false
  9. console.log(result2)//true
  10. console.log(result3)//true
  1. //[]里面的内容也是或的关系;[ab]==a|b
  2. reg = /[ab]/;
  3. var str1 = "cd"
  4. var str2 = "ac"
  5. var str3 = "bv"
  6. var result1 = reg.test(str1)
  7. var result2 = reg.test(str2)
  8. var result3 = reg.test(str3)
  9. console.log(result1)
  10. console.log(result2)
  11. console.log(result3)
  1. //[a-z]表示任意的小写字母
  2. //[A-Z]表示任意的大写字母
  3. //[A-z]表示任意字母
  4. reg = /[a-z]/;
  5. var str1 = "cd"
  6. var str2 = "ac"
  7. var str3 = "bv"
  8. var result1 = reg.test(str1)
  9. var result2 = reg.test(str2)
  10. var result3 = reg.test(str3)
  11. console.log(result1)
  12. console.log(result2)
  13. console.log(result3)
  1. reg = /a[bde]c/;
  2. var str1 = "abc"
  3. var str2 = "adc"
  4. var str3 = "aec"
  5. var result1 = reg.test(str1)
  6. var result2 = reg.test(str2)
  7. var result3 = reg.test(str3)
  8. console.log(result1)
  9. console.log(result2)
  10. console.log(result3)

[^ ]: 除了

  1. reg=/[^ab]/
  2. var str = "ab"
  3. var result = reg.test(str)
  4. console.log(result)//fales
  1. reg=/[^ab]/
  2. var str = "abc"
  3. var result = reg.test(str)
  4. console.log(result)//true

字符串和正则相关的方法

search:检索与正则相匹配的值

indexOf

可以搜索字符串中是否有指定内容

  1. var str = "hello abc hello abc";
  2. var result = str.search("abc")
  3. console.log(result)
  1. 6

如果搜索到指定内容则会返回第一次出现的索引,如果没有搜索到则返回-1

它可以接收一个正则表达式作为参数,然后会根据我们正则表达式去检索字符串

  1. var str = "hello abc aec afc";
  2. //搜索字符串中是否包含有abc,aec或afc
  3. var result = str.search(/[a[bef]c/)
  4. console.log(result)

match: 找到一个或多个正则表达式的匹配
  1. var str = "1a2b3c4d5e6f";
  2. var result = str.match(/[A-z]/)
  3. console.log(result)
  1. ['a', index: 1, input: '1a2b3c4d5e6f', groups: undefined]

默认情况下我们的match只会找到第一个符合要求的内容,找到以后就停止检索,我们可以设置我们的正则表达式为全局匹配模式,这样就可以匹配到所有的内容

  1. var str = "1a2b3c4d5e6f";
  2. var result = str.match(/[A-z]/g)
  3. console.log(result)
  1. ['a', 'b', 'c', 'd', 'e', 'f']

可以为正则表达式设置多个匹配模式且顺序无所谓

  1. var str = "1a2b3c4d5e6f7A8B9C";
  2. var result = str.match(/[a-z]/ig)
  3. console.log(result)

match()会将匹配到的内容封装到一个数组中返回,即使只查询到一个结果

  1. var str = "1a2b3c4d5e6f7A8B9C";
  2. var result = str.match(/[a-z]/ig)
  3. console.log(result)
  4. console.log(Array.isArray(result))

可以根据正则表达式从一个字符串中将符合条件的内容提取出来

replace: 替换正则表达式子串

可以将字符串的指定内容替换为新的内容

  1. //1.被替换的被人
  2. //2.新的内容
  3. //不会影响到原字符串
  4. var str = "1a2b3c4d5e6f";
  5. var result = str.replace("a","@_@")
  6. console.log(str)//1a2b3c4d5e6f
  7. console.log(result)//1@_@2b3c4d5e6f
  1. var str = "1a2a3a4d5e6f";
  2. var result = str.replace(/a/g,"@_@")
  3. console.log(str)//1a2a3a4d5e6f
  4. console.log(result)//1@_@2@_@3@_@4d5e6f
  1. var str = " hello ";
  2. console.log(str)
  3. str = str.replace(/\s/,"");
  4. console.log(str)//" hello "
  5. str = str.replace(/\s/g,"")
  6. console.log(str);//"hello"

split: 把字符串分割为字符串数组
  1. var str = "1a2b3c4d5e6f";
  2. var result = str.split("c");
  3. console.log(result.length)
  4. console.log(result)
  1. 2
  2. (2) ['1a2b3', '4d5e6f']

根据正则表达式去拆分字符串

  1. var str = "1a2b3c4d5e6f";
  2. var result = str.split(/[A-z]/);
  3. console.log(result.length)
  4. console.log(result)
  1. 7
  2. (7) ['1', '2', '3', '4', '5', '6', '']

量词

通过量词可以设置一个内容出现的次数

  1. //var reg = /a/;//这是一个a
  2. //var reg = /a{3}/;//要找a而且要同时出现3次。{n}正好出现n次
  3. //var reg = /ab{1,3}c/;//{m,n}出现m-n次
  4. var reg = /ab{3,}c/;//{m,}:m次以上
  • n+: 匹配任何包含至少一个n的字符串。相当于{1,}
  • n*: 匹配任何包含0个或多个n的字符串。相当于{0,}
  • n?: 匹配任何包含0个或多个n的字符串。相当于{0,1}
  • n{x}:匹配包含X个n的序列的字符串
  • n{x,y}: 匹配包含x或y个n的序列字符串
  • n{x,}: 匹配至少x个n的序列字符串
  • n正则表达式 - 图1/`
  1. var reg = /a$/;//匹配结尾的a
  • ^n: 匹配任何开头为n的字符串,比如/^a/
  1. var reg = /^a/;//匹配开头的a
  • ?=n: 匹配任何其后紧接指定字符串n的字符串
  • ?!n: 匹配任何其后没有紧接指定字符串n的字符串

元字符

元字符 描述
. 查找单个字符,除了换行和行结束符
\w 查找单个字符
\W 查找非单词字符
\d 查找数字
\D 查找非数字字符
\s 查找空白字符
\S 查找非空白字符
\b 匹配单词边界
\B 匹配非单词边界
\0 查找NULL字符
\n 查找换行字符
\f 查找换页字符
\r 查找回车符
\t 查找制表符
\v 查找垂直制表符
\xxx 查找以八进制数xxx规定的字符。
\xdd 查找以十六进制数dd规定的字符
\uxxxx 查找以十六进制数xxxx规定的Unicode字符

\.
  1. var reg = /\./
  2. console.log(reg.test("b"))//false
  3. console.log(reg.test("b.java"))//true
  4. //字符串里面"\\"等于\

注意: 使用构造函数时,由于它的参数是一个字符串,而\是字符串中转义字符,如果使用\则需要使用\\来代替

  1. var reg = new RegExp("\\.");

\w\W
  1. var reg = /\w/;//任意字母、数字、_;[A-z0-9_]
  2. console.log(reg.test("abc"))//true
  3. var reg = /\W/;//除了字母、数字、_[^A-z0-9_]
  4. console.log(reg.test("abc"))//false

\d\D
  1. var reg = /\d/;//任意数字[0-9]
  2. console.log(reg.test("123"))//true
  3. var reg = /\D/;//除了数字[^0-9]
  4. console.log(reg.test("123"))//false

\s\S
  1. var reg = /\s/;//空格
  2. console.log(reg.test("12 3"))//true
  3. var reg = /\S/;//除了空格
  4. console.log(reg.test("12 3"))//false

\b\B

我要找单独的child

  1. var reg = /child/;
  2. console.log(reg.test("hellochildren"))//true
  3. //我要单独找child,他们必须和child分开:"hello child ren"
  4. var reg = /\bchild\b/;//单词边界
  5. console.log(reg.test("hellochildren"))//false
  6. console.log(reg.test("hello child ren"))//true
  7. //\B除了单词边界