JavaScript RegExp 正则表达式对象-数据类型

修饰符

  • g:全局模式,表示查找字符串的全部内容,而不是找到第一个匹配的内容就结束。
  • i:不区分大小写,表示在查找匹配时忽略 pattern 和字符串的大小写。
  • m:多行模式,表示查找到一行文本末尾时会继续查找。
  • y:粘附模式,表示只查找从 lastIndex 开始及之后的字符串。
  • u:Unicode 模式,启用 Unicode 匹配。
  • s:dotAll 模式,表示元字符,匹配任何字符(包括\n 或\r)。

实例属性

  • global:布尔值,表示是否设置了 g 标记。
  • ignoreCase:布尔值,表示是否设置了 i 标记。
  • unicode:布尔值,表示是否设置了 u 标记。
  • sticky:布尔值,表示是否设置了 y 标记。
  • lastIndex:整数,表示在源字符串中下一次搜索的开始位置,始终从 0 开始。
  • multiline:布尔值,表示是否设置了 m 标记。
  • dotAll:布尔值,表示是否设置了 s 标记。
  • source:正则表达式的字面量字符串(不是传给构造函数的模式字符串),没有开头和结尾的斜杠。
  • flags:正则表达式的标记字符串。始终以字面量而非传入构造函数的字符串模式形式返回(没有前后斜杠)。

方法

test()

  • test:检测字符串是否匹配正则 如果匹配 返回 true 不匹配返回 false 表单验证的返回值
1/is/.test('my name is joth') // true
2/is/.test('you are a ediot') // false
3
4RegExp.input    // 查询的字符串
5RegExp.leftContext // 返回表达式之前的字符串
6RegExp.rightContext // 返回表达式之后的字符串
7RegExp.lastMatch  // 返回与表达式匹配的字符串
8RegExp.lastParen  // 返回(.)匹配的捕捉组

macth()

  • 全局 返回所有匹配字符串组成的一个数组。
  • 非全局 返回匹配到的第一个字符串数组,且会返回该字符串的下标及相关信息。
1const str = 'my name is mark, my age is 18, my sex is male'
2var reg = /is/
3str.match(reg) // ["is", index: 8, input: "my name is mark, my age is 18, my sex is male", groups: undefined]
4
5// 全局模式
6var reg = /is/g
7str.match(reg) // ["is", "is", "is"]

exec()

  • 全局模式 有一个自己的 lastIndex 值 引导下次进行 exec 匹配的起始位置。
  • 非全局模式下进行字符串的匹配 结果和 macth 一样
1const str = 'my name is mark, my age is 18, my sex is male'
2var reg = /is/
3
4// 非全局
5reg.exec(str) // ["is", index: 8, input: "my name is mark, my age is 18, my sex is male", groups: undefined]
6
7// 全局
8var reg = /is/g
9reg.lastIndex // 0
10reg.exec(str) // ["is", index: 8, input: "my name is mark, my age is 18, my sex is male", groups: undefined]
11reg.lastIndex // 10
12
13reg.exec(str) // ["is", index: 24, input: "my name is mark, my age is 18, my sex is male", groups: undefined]
14reg.lastIndex // 26
15
16reg.exec(str) // ["is", index: 38, input: "my name is mark, my age is 18, my sex is male", groups: undefined]
17reg.lastIndex // 40
18
19reg.exec(str) // null
20reg.lastIndex // 0

正则预查询

判断括号内表达式

返回 ---> 括号外表达式

  • 正向肯定

(?=):

表达式 1(?= 表达式 2)

返回 --> 前面是表达式 1

后面是表达式 2

1const path1 = 'path/hello.html'
2const reg = /\w+(?=.html)/ // 前面是数字字母_  后面是 .html
3path1.match(reg) // hello
  • 正向否定

(?!):

表达式 1(?!表达式 2)

返回 ---> 前面是表达式 1

后面不是表达式 2

1const str = 'a,1,b,2,c,3,'
2const reg = /,(?![a-z]|$)/g // 前面是, 后面不是字母
3str.replace(reg, '=') // 'a=1,b=2,c=3,'
  • 反向肯定

(?<=):

(?<=表达式 2)表达式 1

前面是表达式 2

返回 ---> 后面是表达式 1

1const path1 = 'path/hello.html'
2const reg = /(?<=path\/)\w+/ // 前面是 path/ 后面是数字字母_
3path1.match(reg) // hello
  • 反向否定

(?<!):

(?<!表达式 2)表达式 1

前面不是表达式 2

返回 ----> 表达式 1

1const str = 'a,1,b,2,c,3,'
2const reg1 = /(?<!\d),/g // 前面不是, 后面是,
3str.replace(reg1, '=') // 'a=1,b=2,c=3,'

元字符

  • 单个字符

    • . 匹配除换行外单个的任意字符
    • [范围] 匹配单个范围内的字符
    • [0-9] 匹配单个 数字
    • [^范围] 匹配单个范围内除括号内的字符
    • [^0-9] 匹配单个 非数字
    • [a-zA-Z0-9_] 匹配单个 数字、字母、下划线_
    • \w 匹配单个 数字、字母、下划线 等价于 [a-zA-Z0-9_]
    • \W 匹配单个 非数字、字母、下划线
    • \d 匹配单个 数字 等价于 [0-9]
    • \D 匹配单个 非数字 等价于 [^0-9]
  • 重复字符

    • x 代表任意的单个字符
    • x? 匹配 0 个或 1 个 x /goog?le/ 要么是 google 要么是 goole
    • x+ 匹配最少 1 个字符
    • x* 匹配任意个 x 字符
    • x{m,n} 匹配至少 m 个,最多 n 个(包括 n
    • x{n} 必须匹配 n 个字符
    • (xyz)+ 小括号括起来的部分是当做单个字符处理
  • 空白字符

    • \s 匹配任意单个空白字符(空格 制表 回车
    • \S 匹配任意单个非空白字符
    • \b 单词边界
    • \B 非单词边界
  • 锚字符

    • ^ 行首匹配/^google/
    • $ 行尾匹配/google$/
  • 替代字符

    • | 或 /google|baidu|bing/
  • 转义字符

    • \.
    • \*
  • 验证字符串是否存中文

    1/^[\u4E00-\u9FA5]+$/