正则表达式

84 阅读3分钟

正则表达式

概述

正则表达式是一种用于检索对应的字符串的表达式,主要用于判断字符串的格式及相关的内容。

正则对象声明

字面量(常用)
var reg = /a/ig   //正则对象 全局检测不区分大小写 /内容/模式修饰符
new (new后面带的是构造函数)
var reg = new RegExp('a','ig') //传入俩个参数 第一个参数是内容 第二个参数为模式修饰符

模式修饰符

  • i 不区分大小
  • g 全局检测
  • m 分组
  • s 匹配任意单个字符

元字符

  • [] 表示其中一个字符

    var reg = /[0123]/  //abc其中一个
    console.log(reg.test('1abcd')) //true
    console.log(/0123/.test('1abcd')) //false
    
  • {} 表示个数

    //{} 表示个数 第一个表示最少的个数  第二个表示最多的个数(无限个)
    var reg1 = /1{2,3}/ //表示俩个1或者3个  /11/ /111/
    console.log(reg1.test('132611')) //true
    console.log(reg1.test('1113261')) //true
    console.log(reg1.test('10101')) //false
    //[0123]{2,3} 取前面[]中的任意内容 取2到3次
    console.log(/[0123]{2,3}/.test("123")) //true
    console.log(/[0123]{2,3}/.test("111")) //true
    //取前面这位
    console.log(/123{2,3}/.test('123123123')) //false
    console.log(/123{2,3}/.test('1233abc')) //true
    //取最少俩次到无限
    console.log(/[01]{2,}/.test('111111111111')) //true
    //最少0
    console.log(/[01]{0,}/.test('abcd')) //true
    
  • ^ 开头 $ 结尾

    // ^ $表示开头结尾
    var reg2 = /^123$/ //只能匹配123
    console.log(reg2.test("123"))//true
    console.log(reg2.test("133"))//false
    console.log(/123/.test("123123"))//true 没有开头结尾只要存在就ok
    console.log(reg2.test("123123"))//false 有开头结尾必须满足对应的格式
    console.log(/^[012][ab]{1,2}/.test("1abc")) //true 只写开头前面有规范后面随便写
    console.log(/^[012][ab]{1,2}/.test("012abc")) //false 只写开头前面有规范后面随便写
    console.log(/[012][ab]{1,2}$/.test("abc012abc")) //false 只写结束后面有规范前面面随便写
    console.log(/[012][ab]{1,2}$/.test("abc012abb")) //false 只写结束后面有规范前面面随便写
    console.log(/[012][ab]{1,2}$/.test("abc013ab")) //false 只写结束后面有规范前面面随便写
    console.log(/[34][01]{1,2}$/.test("34210")) //false 只写结束后面有规范前面面随便写
    console.log(/[34][abc]{1,2}$/.test("34abc")) //false 只写结束后面有规范前面面随便写
    
  • () 分组

    //() 分组 将内容当做一个整体
    var reg3 = /^(abc){2,3}$/
    console.log(reg3.test("abcabcdef"))  //false
    console.log(reg3.test("abcabcab"))  //false
    console.log(reg3.test("abcabc"))  //true
    console.log(reg3.test("abcabcabc"))  //true
    console.log(/^abc{2,3}$/.test("abcabcabc"))  //false
    console.log(/^abc{2,3}$/.test("ababccc"))  //false
    console.log(/^abc{2,3}$/.test("abcc"))  //true
    console.log(/^abc{2,3}$/.test("abccc"))  //true
    
  • + 表示1个到多个 {1,}

    // + 1到多个 {1,}
    console.log(/^[01]+$/.test("01"))//true
    console.log(/^[01]+$/.test("011111000"))//true
    console.log(/^[01]+$/.test("011112"))//false
    console.log(/^(123+[134]+)+$/.test("123123134134"))//false
    console.log(/^(123+[134]+)+$/.test("12313134134"))//true
    console.log(/^(123+[134]+)+$/.test("123213134134"))//false
    
  • ? 表示0个到1个 {0,1}

    // ? 0到1个  {0,1}
    console.log(/^[123]?/.test("abc1")) //true
    
  • * 表示0个到多个 {0,}

    // * 0个到多个 {0,}
    console.log(/^(123?[134]?)*$/.test('1234'))//true
    console.log(/^(123?[134]?)*$/.test('1244444'))//false
    console.log(/^(123?[134]?)*$/.test('124'))//true
    
  • . 表示任意一个内容

    // . 所有的内容
    console.log(/^.*$/.test('您好世界')) //true
    console.log(/^.*$/.test('abcdefg')) //true
    console.log(/^.$/.test('abcdefg')) //false
    
  • \w 数字字母下划线 \W 非数字字母下划线

    console.log(/\w/.test('abdef')) //true
    console.log(/^\w*$/.test('a_123bcd')) //true
    console.log(/^\W*$/.test('a_123bcd')) //false
    console.log(/^\w*$/.test('a-123bcd')) //false
    //[0-9a-zA-Z_] === \w
    console.log(/^[0-9a-zA-Z_]*$/.test('a_123bcd')) //true
    
  • \d 数字 \D 非数字

    console.log(/\d/.test('123')) //true
    console.log(/\D/.test('123')) //false
    //[0-9] === \d
    console.log(/^[0-9]*$/.test('123')) //true
    
  • \s 空字符 \S 非空字符

    console.log(/\s/.test(" "))//true
    console.log(/\S/.test(" "))//false
    
转义字符 用来将对应的元字符进行转义的 转义普通的字符 \
// var is = /?/.test('?') 报错
//使用[]括号 将里面的元字符串转为对应的字符串
var is = /[?]/.test('?') //true
console.log(is)
var is = /[.]/.test('.') //true
console.log(is)
var is = /[.]/.test('abc') //false
console.log(is)
var is = /^[\w]$/.test('\w')//true
console.log(is)
//第二种使用转义字符串 \ 转义为普通字符串
var is = /\?/.test('?')
console.log(is)
//并不能转义特殊的元字符
var is = /^\\w]$/.test('\w') //false
console.log(is)
var is = /\./.test('.')
console.log(is)

正则对象的方法

test 测试是否满足匹配返回boolean类型的值

var is = /\w/.test('abc') //true
console.log(is) //true
var is = /\w/.test('???') //false
console.log(is) //false

exec 返回匹配的数组 (类似于match方法)

// exec 返回匹配的数组 类似于字符串match方法
console.log(/\w/.exec('abc')) //["a", index: 0, input: "abc", groups: undefined]
//没有匹配的返回null
console.log(/\w/.exec('???'))

正则对象的属性

console.log(/a/s.dotAll) //是否使用模式修饰符 s
console.log(/a/ig.flags) //使用到的模式修饰符
console.log(/a/g.global) //是否使用模式修饰符 g
console.log(/a/i.ignoreCase) //是否使用模式修饰符 i
console.log(/a/m.multiline) //是否使用模式修饰符 m
console.log(/a/.lastIndex)//下一个匹配的位置
console.log(/\w/.source) //内容
console.log(/a/.sticky) //搜索是否具有粘性

字符串支持正则方法

  • search 查找(返回下标)
  • replace 替换 (返回新的字符串)
  • split 分割 (返回数组)
  • match (匹配 返回匹配内容的数组)