JS正则总结

本文最后更新于:2022年4月8日 晚上

js正则

首先是用//包裹

let reg = /^1[345789]\d{9}$/g

后缀

  • i

ignoreCase : 忽略大小写

  • g

global : 全局匹配,即匹配全部满足的(不是贪婪匹配)

  • m

multiline : 多行匹配

正则的方法

  1. reg.test(str):用来匹配字符串是否可以匹配这个正则(正则对象上的方法, 频率最高)

  2. str.match(reg): 有多少个匹配成功的字符串并显示(字符串上的方法)

  3. reg.search(str): 返回匹配到的第一个字符的位置

  4. reg.source: 正则的内容

  5. reg.exec(str): 返回匹配到的第n个字符串

  6. reg.lastIndex: 第n个匹配字符串的索引

    注意:4, 5的函数都是基于global匹配的,因为只有可以匹配多个才能有第几个匹配

  7. str.split(reg): 很多时候我们都是用字符串来分隔字符的,但是我们也可以用正则

  8. str.replace(reg, char)

    这个js原生的replace是只能匹配第一个字符,也就是replaceFirstIndex

    如果我们使用全局的正则(g)来匹配,就能匹配替换所有了

开头和结尾固定匹配

  • 开头:^

  • 结尾:$

字符的范围

使用[]

eg:

let reg1 = /[0-3]/
// 这就是匹配出现0~3的字符串
let reg2 = /[ac]/
// 匹配有a或者c出现的字符串

如果^[]里面,代表着‘非’

eg:

let reg = /[^a]/
// 匹配范围为不是a的所有字符

选择性匹配

使用|

eg:

let reg = /^(a|b|c)/
// 匹配开头是a或者b或者c

重复多少次

使用{}

eg:

let reg1 = /0{9}/
// 这就是匹配有9个0相邻的字符串
let reg2 = /0{3,5}/
// 就是匹配3个到5个0
let reg3 = /0{1,}/
// 匹配1到∞个0

默认的匹配是贪婪匹配,能多匹配就多匹配

重复次数扩展(很少用到)

  • +

    {1,} : 匹配当前字符一次到无数次

  • *

    {0,} : 匹配当前字符0次到无数次

  • ?

    {0,1} : 匹配当前字符零次或一次

取消贪婪匹配

默认的重复次数匹配是贪婪的,能匹配多个就多个

可以使用?来取消

eg:

let reg = /a{1,3}?/
// 能匹配一个就不匹配两个

常见元字符

只要看到大写,就是小写的取反

  • .

    匹配所有单个字符,除了换行和结束符

  • \w

    word : 匹配字母

  • \d

    digit : 匹配数字

  • \s

    space : 匹配空白(不单指空格)

  • \b

    border : 匹配单词边界(前后有空格的字符)

  • \uxxxx

    unicode : 匹配汉字

子表达式反向引用

使用\n来代表第n个子表达的引用(即n为数字)

let reg = /(\d)\1\1/
// 可以匹配出连续三个相同的数字

使用replace反向引用子表达式

使用$n来表示第n个子表达式的引用

let reg = /-(\w)/
let str = 'the-first-name'
str.replace(reg, ($, $1) => {
  return $1.toUpperCase
})

常见问题

  1. 匹配任意长度字符串?

/[\d\D]*/

  1. 匹配AABB型?

/(.)\1/

  1. 字符串去重
let reg = /(\w)\1*/
str.replace(reg, '$1')

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!