# JS正则表达式

JS正则表达式

# 创建正则表达式(两种方式)

// 正则表达字面量
var reg = /ab+c/

// 构造函数
var reg = new RegExp('ab+c') // 可传变量
1
2
3
4
5

# 修饰符

  • i(insensitive):对大小写不敏感
  • g(global):执行全局匹配,即搜完第一个还会不会继续搜。
  • m(multi):执行多行匹配

# 常用的特殊字符

# 字符

`\n`:换行符
`.`:除 换行符以外 的任何字符

`\d`0-9之间的任意一个数字
`\D`:和`\D`相反

`\w`:数字、字母、下划线(即0-9、a-z、A-Z、_)
`\W`:和`\w`相反

`\s`:空白(包括空格、tab缩进、换行符)
`\S`:和`\s`相反

1
2
3
4
5
6
7
8
9
10
11
12

# 数量

*+?{n}{n,}{n,m}

# 位置

^:以 xx 开头

^ 若在[^集合]内使用时,代表 对集合的内容求反

$:以 xx 结尾

# 括号

( ):需匹配的整个字符串

[ ]:需匹配的集合中的任意一个

{ }:表示数量

  • {n}{n,}{n,m}
  • *,相当于 {0,}
  • +,相当于 {1,}
  • ?,相当于 {0,1}
    • 如果在 量词 后面,代表 懒惰匹配

# 多选

|:相当于“或”

# 需要转义的特殊字符

^$\.*+?()[]{}|

# js中和正则有关的所有方法

TIP

RegExp

  • test
  • exec

String(注意,以下是字符串的方法)

  • match
  • replace
  • search
  • split

# [RegExp]test

主体是regex。 用来简单检测string是否匹配结果

  • 参数:string
  • 返回:true | false
var regex = /he/
regex.test('heshiyu') // true
1
2

# [String]match

# 全局与否

全局匹配、非全局匹配 下返回的结果不同:

var str = `heshiyu`;

// 非全局匹配,`match`永远只会返回 被匹配到第一个的字符串
str.match(/h.{1}/); // ['he']

// 全局匹配,`match`会返回 所有被匹配到的字符串
str.match(/h.{1}/g); // ['he', 'hi']
1
2
3
4
5
6
7

匹配不到,会返回null

# 括号与否

非全局匹配 下,携带圆括号( )与否的返回结果不同:

var str = `heshiyu`;

// 非全局匹配,没有携带圆括号,`match`永远只会返回 被匹配到第一个的字符串
str.match(/h.{1}.*h.{1}/); // ['heshi']

// 非全局匹配,且携带圆括号,`match`会返回 被匹配到第一个的字符串、括号内匹配到的
str.match(/(h.{1}).*(h.{1})/); // ['heshi', 'he', 'hi']
1
2
3
4
5
6
7

# 常用正则

# 正则匹配邮箱

/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/

# 贪婪匹配、懒惰匹配

贪婪匹配:顾名思义很贪婪,要最大限度地占用字符串。

懒惰匹配:一匹配到满足条件的就停止了这次匹配

若为 全局匹配 ,后续同样懒惰地匹配。

# ?在正则中有两种作用:

  • 放在一个 普通的 元字符后面:代表常出现0-1次
    • /\d?/表示数字可能出现,也可能不出现
var regex = /\d+/g // 放在 普通的元字符 后面,表示最大限度地占用字符串
var str = 'abc2015def2016ghi'
var result = str.match(regex); // ['2015', '2016']
1
2
3
  • 放在一个 量词的 元字符后面:代表懒惰匹配
var regex = /\d+?/g // 放在 量词的元字符 后面,表示 懒惰匹配
var str = 'abc2015def2016ghi'
var result = str.match(regex); // ['2', '0', '1', '5', '2', '0', '1', '6']

1
2
3
4
更新时间: 4/26/2020, 9:29:52 PM