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 表单验证的返回值
js
/is/.test('my name is joth') // true
/is/.test('you are a ediot') // false
RegExp.input // 查询的字符串
RegExp.leftContext // 返回表达式之前的字符串
RegExp.rightContext // 返回表达式之后的字符串
RegExp.lastMatch // 返回与表达式匹配的字符串
RegExp.lastParen // 返回(.)匹配的捕捉组
macth()
- 全局 返回所有匹配字符串组成的一个数组。
- 非全局 返回匹配到的第一个字符串数组,且会返回该字符串的下标及相关信息。
js
var str = "my name is mark, my age is 18, my sex is male"
var reg = /is/
str.match(reg) // ["is", index: 8, input: "my name is mark, my age is 18, my sex is male", groups: undefined]
// 全局模式
var reg = /is/g
str.match(reg) // ["is", "is", "is"]
exec()
- 全局模式 有一个自己的 lastIndex 值 引导下次进行 exec 匹配的起始位置。
- 非全局模式下进行字符串的匹配 结果和 macth 一样
js
var str = "my name is mark, my age is 18, my sex is male"
var reg = /is/
// 非全局
reg.exec(str) // ["is", index: 8, input: "my name is mark, my age is 18, my sex is male", groups: undefined]
// 全局
var reg = /is/g
reg.lastIndex // 0
reg.exec(str) // ["is", index: 8, input: "my name is mark, my age is 18, my sex is male", groups: undefined]
reg.lastIndex // 10
reg.exec(str) // ["is", index: 24, input: "my name is mark, my age is 18, my sex is male", groups: undefined]
reg.lastIndex // 26
reg.exec(str) // ["is", index: 38, input: "my name is mark, my age is 18, my sex is male", groups: undefined]
reg.lastIndex // 40
reg.exec(str) // null
reg.lastIndex // 0
正则预查询
判断括号内表达式
返回 ---> 括号外表达式
- 正向肯定
(?=):
表达式 1(?= 表达式 2)
返回 --> 前面是表达式 1
后面是表达式 2
js
var path1 = "path/hello.html"
var reg = /\w+(?=.html)/ // 前面是数字字母_ 后面是 .html
path1.match(reg) // hello
- 正向否定
(?!):
表达式 1(?!表达式 2)
返回 ---> 前面是表达式 1
后面不是表达式 2
js
var str = "a,1,b,2,c,3,"
var reg = /,(?![a-z]|$)/g // 前面是, 后面不是字母
str.replace(reg, "=") // 'a=1,b=2,c=3,'
- 反向肯定
(?<=):
(?<=表达式 2)表达式 1
前面是表达式 2
返回 ---> 后面是表达式 1
js
var path1 = "path/hello.html"
var reg = /(?<=path\/)\w+/ // 前面是 path/ 后面是数字字母_
path1.match(reg) // hello
- 反向否定
(?<!):
(?<!表达式 2)表达式 1
前面不是表达式 2
返回 ----> 表达式 1
js
var str = "a,1,b,2,c,3,"
var reg1 = /(?<!\d),/g // 前面不是, 后面是,
str.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/
转义字符
- \.
- \*
验证字符串是否存中文
js;/^[\u4e00-\u9fa5]+$/