Web APIs 知识总结【正则表达式】

205 阅读4分钟

正则表达式

介绍

定义

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

特点

  1. 灵活性、逻辑性和功能性非常强
  2. 可以迅速地极简单的方式达到字符串的复杂控制
  3. 对于刚接触的人比较晦涩
  4. 实际开发一般都是直接复制写好的正则表达式,但是要求会使用正则表达式并根据实际情况修改正则表达式

使用场景

  1. 验证表单(匹配)
  2. 过滤掉页面内容中的一些敏感词(替换)
  3. 从字符串中获取我们想要的特定部分(提取)等


语法

定义规则

let 变量名 = /表达式/

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

let reg = /abc/

匹配检测

变量名.test(被检测的字符串) 

test() 方法用来查看正则表达式与指定字符串是否匹配,如

reg.test(str)
  • 匹配返回 true
  • 不匹配返回 false

检索(查找)符合规则的字符串

reg.exec()

exec() 方法在一个指定字符串执行搜索匹配

  • 匹配成功返回一个数组
  • 匹配失败返回 null


元字符

普通字符

所有的字母和数字,仅能够描述它们本身,这些字符称作普通字符。即普通字符只能够匹配字符串中与它们相同的字符

元字符(特殊字符)

定义

一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能

参考文档:developer.mozilla.org/zh-CN/docs/…

正则测试工具: tool.oschina.net/regex

分类

边界符

  1. 作用:提示字符所处的位置

  2. 分类

    边界符说明
    ^表示匹配行首的文本(以谁开始)
    $表示匹配行尾的文本(以谁结束)

    注意:

    如果 ^$ 在一起,表示必须是精确匹配

例题

console.log(/哈/.test('哈'))  // true
console.log(/二哈/.test('二哈'))  // true
console.log(/二哈/.test('很二哈哈'))  // true

以^开头
console.log(/^二哈/.test('很二哈哈'))  // false
console.log(/^二哈很傻/.test('哈'))  // true

以$结尾
console.log(/^二哈$/.test('二哈很傻'))  // false
console.log(/^二哈$/.test('二哈二哈'))  // false
console.log(/^二哈$/.test('二哈'))  // true

量词

  1. 作用:设定某个模式出现的次数

  2. 分类

    量词说明
    *重复零次或更多次
    +重复一次或更多次
    ?重复零次或一次
    {n}重复 n
    {n,}重复 n 次或更多次
    {n,m}重复 n 次到 m

    注意:

    逗号左右两边不能出现空格

字符类

  1. 作用:用简单的字符表示繁琐的范围

  2. 分类

    • [ ] :匹配字符集合

      console.log(/[abc]/.test())
      

      后面的字符串只要包含 abc 中任意一个字符,都返回 true

    • [-] :- 连字符,表示一个范围

      如:[a-z] 表示 az 26个英文字母都可以

    • [^] :里面加上 ^ 取反符号

      [^a-z] 匹配除了小写字母以外的字符

      注意:

      ^ 要写到中括号里面。



预定义类

定义:某些常见模式的简写方式

分类

预定类说明
\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]
.代表一个任意字符


修饰符

  1. 作用:约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等

  2. 语法

    /表达式/修饰符
    
    • i 是单词 ignore 的缩写,正则匹配时字母不区分大小写
    • g 是单词 global 的缩写,匹配所有满足正则表达式的结果
  3. 替换 replace

    字符串.replace(/正则表达式/,'替换的文本')
    
    • 第一个参数:被替换的字符串或者正则表达式
    • 第二个参数:替换为的字符串


总结

正则表达式.png

正则表达式可能遇到的错误

  1. Invalid regular expression: /^[0-9A-Zz-a_]$/: Range out of order in character class

    无效的正则表达式,在ASCII字符集中范围超出排序规则。说明在指定连续范围的时候,只能从小到大。即只能从 a-z ,从 0-9 ,不能反过来,否则报错。

  2. Invalid regular expression: /^*$/: Nothing to repeat

    无效的正则表达式,没有可重复的东西。修饰符不能单独存在,必须修改前面的占位符。