正则表达式

122 阅读3分钟

正则表达式

正则表达式: 是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象, 通常用来查找,替换那些符合正则的文本,许多语言都支持正则表达式

语法规范: 1.定义规则: 2.根据规则去查找

语法: const 变量名 = /表达式/

其中/ /是正则表达式的字面量

<script>
   const str = '有前端吗,有前端就返回,没有前端就退出'
    // 1.定义规则
    const reg = /前端/ //不能有空格,不然就是false
    // 判断是否有符合规则的字符串
    // 语法: text()方法  返回的是一个布尔值
    const i = reg.test(str)
    console.log(i); //true
    // 查找符合规则的字符串
    // 语法:  exec()方法   返回的是一个数组 否则就是null
    const j = reg.exec(str)
    console.log(j);
  </script>

元字符

  • 普通字符: 大多数字符仅能描述他们本身,这些字符被称作为普通字符,比如所以的字母和数字.也就是说普通字符只能够匹配字符串中与他们相同的字符.

  • 元字符(特殊字符): 是具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能.

    1.比如规定用户只能输入英文26个字母.普通字符的话abcdef.....

    2.但是换成元字符写法:[a-z]

元字符分类

边界符号

边界符号: 表示位置,开头和结尾,必须用什么开头,用什么结尾

语法:

//^  表示匹配行首的文本(以谁开始)
    console.log(/^abc/.test('a123')); //false
    console.log(/^abc/.test('abc')); //true
    console.log(/^abc/.test('ABCabc')); //false
    //$  表示匹配行尾的文本(以谁结束)
    console.log(/abc$/.test('abc')); //true
    console.log(/abc$/.test('dAbc')); //false
    console.log(/abc$/.test('abcd')); //false
    //如果^和&一起表示必须是精确匹配
    console.log(/^abc$/.test('abc')); //true 
    //只有这种情况为true,其他全为false
    console.log(/^abc$/.test('abbc')); //false

量词

量词(表示重复次数): 量词用来设定某个模式出现的次数

语法:

// *  重复零次或更多次  类似于>=0,但是不允许出现别的
    console.log(/abc*/.test('abc')); //true
    console.log(/abc*/.test(' ')); //true
    console.log(/abc*/.test('abcabc')); //true
    // + 重复一次或更多次 类似于>=1,但是不允许出现
    console.log(/abc+/.test('abc')); //true
    console.log(/abc+/.test(' ')); //false
    console.log(/abc+/.test('abcabc')); //true
    // ?  重复零次或一次  类似于0||1
    console.log(/abc?/.test('abc')); //true
    console.log(/abc?/.test(' ')); //true
    console.log(/abc?/.test('abcabc')); //false
    // {n} 重复n次  写几就必须出现几次
    console.log(/abc{2}/.test('abc')); //false
    console.log(/abc{2}/.test('abcabc')); //true
    console.log(/abc{2}/.test('abcabcabc')); //false
    // {n,} 重复n次或更多次  类似>=n
    console.log(/abc{2,}/.test('abc')); //false
    console.log(/abc{2,}/.test('abcabc')); //true
    console.log(/abc{2,}/.test('abcabcabc')); //true
    // {n,m} 重复n次到m次   > = n && < = m
    console.log(/abc{2,4}/.test('abc')); //false
    console.log(/abc{2,4}/.test('abcabc')); //true
    console.log(/abc{2,4}/.test('abcabcabc')); //true
    console.log(/abc{2,4}/.test('abcabcabcabc')); //true
    console.log(/abc{2,4}/.test('abcabcabcabcabc')); //false

字符类

字符类: 量词用来设定某个模式出现的次数(比如\d 表示0~9,简略到极致)

  1. [ ]匹配字符集合
    //后面字符串只要包含abc中任意一个字符,返回true
    console.log(/[abc]/.test('body')); //true
    console.log(/[abc]/.test('a')); //true
    console.log(/[abc]/.test('vscode')); //true
    console.log(/[abc]/.test('ab')); //true
    // 加上精确匹配就只能输入一个
    console.log(/^[abc]$/.test('ab')); //false
    console.log(/^[abc]{2}$/.test('ab')); //true
    console.log(/[abc]/.test('a')); //true
  1. 使用连字符-表示一个范围
    // [a-z] [a-zA-Z]  [0-9] 
    console.log(/[a-z]/.test('div')); //true
    //  []里面加上^取反符号
    // [^a-z]匹配除小写字母以外的字符
    console.log(/[^a-z]/.test('a')); //false
    console.log(/[^a-z]/.test('A')); //true
    console.log(/[^a-z]/.test('1')); //true
  1. 预定义: 指的是某些常见模式的简写模式
    // \d  匹配0-9之间的数字   [0-9]
    // \D  匹配0-9以外的字符   [^0-9]
    // \w  匹配任意的字符,数字,下划线   [A-Za-z0-9-]
    // \W  匹配所以除字符,数字,下划线以外的字符 [^A-Za-z0-9-]
    // \s  匹配空格(包括换行符,制表符,空格符)   [\t\r\n\v\f]
    // \S  匹配非空格的字符 [^\t\r\n\v\f]

修饰符

修饰符: 修饰符约束正则执行的某些细节行为,如是否分大小也,是否支持多行匹配

<script> 
    // 语法:  /表达式/修饰符
    // i 是ignore的缩写,正则匹配时字母不区分大小写
    // g 是global的缩写,匹配所有满足正则表达式
    console.log(/a/i.test('a')); //true
    console.log(/a/i.test('A')); //true
    // 替换 replace
    // 语法: 字符串.replace(/正则表达式/,'替换文本')
    const str = 'Java是一门编程语言'
    const str1 = str.replace(/Java/i, '前端')
    console.log(str1);
  </script>