目录
1. 认识 正则表达式 - Regular Expression
1. 认识 正则表达式 - Regular Expression
+ JS 中的数据类型, 是一个 复杂数据类型
+ 作用: 专门用来验证 **字符串** 是否符合规则
正则表达式的创建
1. 字面量方式创建正则表达式
=> 语法: var reg = /abcd/// 1. 字面量方式创建正则表达式 // 意思: 当你使用这个 reg 正则去验证字符串的时候, // 要求字符串中必须包含 abcd 这个字符片段 // 验证: 'hjdasghjdabcd' true // 验证: 'sadadfbasdadc' false var reg = /abcd/ console.log(reg)
2. 内置构造函数创建正则表达式
=> 语法: var reg = new RegExp('abcd')// 2. 内置构造函数创建正则表达式 var reg2 = new RegExp('abcd') console.log(reg2)
正则表达式两种创建方式的区别:
0. 语法不一样
1. 标识符的书写
=> 字面量方式, 直接书写在正则的最后面
=> 内置构造函数方式, 需要书写在第二个参数的位置// 1. 标识符的书写 var reg = /abcd/gi console.log(reg) // var reg1 = /abcd/ig // console.log(reg1) // 打印 => /abcd/gi var reg2 = new RegExp('abcd', 'ig') console.log(reg2) // 打印 => /abcd/gi
2. 字符串拼接
=> 字面量方式无法拼接字符串
=> 内置构造函数, 因为第一个参数位需要字符串格式, 所以可以使用字符串拼接// 2. 拼接字符串 var s = 'HH' var s2 = 'MM' // 字面量方式不能进行字符串拼接 , 不能解析变量 var reg = /(HH|MM)/ console.log(reg) // 打印 => /(HH|MM)/ // 内置构造函数可以拼接字符串 // 因为第一个参数就是需要你以 字符串 的形式传递 // 所以可以拼接字符串 var reg2 = new RegExp('(' + s + '|' + s2 + ')') console.log(reg2) // 打印 => /(HH|MM)/
3. 基本元字符的书写
=> 字面量方式的时候, 直接书写 \s\d\w
=> 内置构造函数书写的时候, 需要书写 \\s\\d\\w// 3. 书写基本元字符 var reg = /\s\d\w/ console.log(reg) // 打印 => /\s\d\w/ var reg2 = new RegExp('\\s\\d\\w') console.log(reg2) // 打印 => /\s\d\w/
为什么内置构造函数书写基本元字符需要双斜线
+ 字符串
=> 被引号包裹的所有内容叫做字符串
=> 在字符串内有一个特殊的符号叫做斜线 ( \ ) => 表示转义符号
=> 会把紧挨着他的一个内容转换
-> 如果是有意义的内容转换成没有意义的内容
-> 如果是没有意义的内容转换成有意义的内容
=> 你书写了一个字符串 '\s\d\w'
-> 在这个字符串内把 s 给转换成有意义的内容
-> 因为 \s 是没有特殊意义的
-> 其实就是一个 s 普通文本
-> '\s\d\w' 其实就是 'sdw'
-> 例子: n 是一个没有意义的字母
+ 当 n 和 转义符 在一起的时候, 就表示 换行+ new RegExp()
=> 第一个参数需要一个字符串
=> 你写的字符串就是正则内部的内容
=> 如果你想得到 /\s\d\w/
=> 那么你要给他的字符串里面写上 \s\d\w
=> 但是, 因为在字符串中 \ 是转义符
=> 当你书写字符串 '\s' 的时候, \ 就会把 s 转换成有意义的特殊内容
-> 可是字符串中确实没有 \s 组成的特殊意义字符, 所以就变成了一个 单独的 字母 s
为什么双斜线好使 :
=> 在字符串内, 斜线是有特殊意义的转义符
=> 使用 转义符( \ ) 把 有意义的转义符 ( \ ) 转换成没有意义的 斜线文本 \
=> 当你书写 '\\s\\d\\w' 的时候, 实际对应的字符串就是 '\s\d\w'当你创建正则表达式的时候
=> new RegExp('\s\d\w')
=> new RegExp('sdw')
// 没有意义的 n 文本内容 console.log('n') // 使用转义符号把 n 转换成有特殊意义的内容 // 变成换行符号了 console.log('\n')
console.log('s') // 打印 => s console.log('\s') // 打印 => s // 用 转义符 把 转义符 给 转义 // 第一个 斜线是表示转义符, 把紧挨着他的内容转换 // 紧挨着第一个斜线的又是一个斜线 console.log('\\s') // 打印 => \s
// 小明说: "小红告诉他: '今天早上起晚了'。" var str = '小明说: "小红告诉他: \'今天早上起晚了\'。"' console.log(str)
console.log('\s\d\w')// 其实 这个字符串就是 'sdw'
2. 正则表达式的常用方法
1. test( ) 匹配
2. exec( ) 捕获1. test( ) 匹配
+ 语法: 正则表达式.test('要检测的字符串')
+ 返回值: 一个布尔值
=> 如果字符串满足正则要求, 那么就是 true
=> 如果字符串不满足正则要求, 那么就是 false// 1. test() 匹配 // 意义: 字符串中必须包含 abcd 字符串片段 var reg = /abcd/ var res = reg.test('1324abcd2345tgfs') console.log(res) // true
2. exec( ) 捕获
+ 语法: 正则.exec(要捕获的字符串)
=> 作用: 从 字符串中 把满足正则条件的部分获取出来
+ 返回值:
2-1. 如果原始字符串中没有满足正则表达式要求的字符串片段内容
=> 那么就是返回 null
2-2. 如果原始字符串中有满足正则表达式片段的内容
2-2-1. 正则没有 ( ) 也 没有 全局 标识符 g
=> 返回结果是一个 数组
=> 索引 [0] 位置就是从字符串中捕获出来的满足正则要求的第一个内容
=> 注意 : 不管捕获多少次 , 你的每一次捕获都是从原始字符串的索引 0 开始去查找
2-2-2. 正则 有 全局 标识符 g
=> 返回值是一个 数组
=> 索引 [0] 位置就是从字符串中捕获出来满足正则要求的第一个内容
=> 注意 : 第二次捕获是从第一次捕获的结束位置开始向后查找
=> 直到最后捕获不到为止(找到为 null ), 再下一次时又是从字符串 索引[0] 开始查找
2-2-3. 有 ( )
=> 返回结果是一个 数组
=> 索引 [0] 位置就是从字符串中捕获出来的满足正则要求的第一个内容
=> 从索引 [1] 开始, 依次是正则表达式中的每一个小括号的单独内容
+ 注意: 按照小括号的开始标志, 来数是第几个小括号
扩展:
+ 括号 ( ) 有两个意义
=> 一个整体
=> 单独捕获
+ 如果你想只使用一个意义, 整体的所用, 不想在捕获的时候单独捕获出来
=> 你可以写成 (?:)
=> 匹配但不捕获// 2. exec() 捕获 var str = 'weixin123scf456abf789sdb000' // 2-1. 没有符合正则要求的字符串片段 var reg = /\d{4}/ var res = reg.exec(str) console.log(res) // null // 2-2. 有符合正则表达式要求的内容 // 2-2-1. 没有 () 没有 g var reg = /\d{3}/ var res = reg.exec(str) console.log(res) // index: 6 // 2-2-2. 有全局标识符 g var reg = /\d{3}/g var res = reg.exec(str) console.log(res) // index: 6 console.log(reg.exec(str)) // index: 12 console.log(reg.exec(str)) // index: 18
// 2-2-3. 有() // 第一个小括号: 省 // 第二个小括号: 市 // 第三个小括号: 县 // 第四个小括号: 年 // 第五个小括号: 月 // 第六个小括号: 日 // 第七个小括号: 性别 // 第八个小括号: 最后一位 var reg = /(\d{2})(\d{2})(\d{2})((\d{4})(\d{2})(\d{2}))\d{2}(\d)(?:\d|x)/ var res = reg.exec('我的身份证号是 : 11010820030711001x ^_^') console.log(res)
3. 正则表达式的符号 - 基本元字符
正则表达式的组成部分
+ 文本
=> 没有特殊意义的文本
+ 元字符
=> 所有的文本内容
=> 有特殊意义的 字符 , 用符号表示一类内容
+ 标识符
=> 书写在正则表达式的外面, 用来修饰整个正则表达式的元字符 - 基本元字符
1. \d : 表示 一位 数字 内容
2. \D : 表示 一位 非数字 内容// 1. \d // 意义: 表示字符串中 必须至少包含一位 数字内容(0-9) var reg = /\d/ var res = reg.test('ab2de') console.log(res) // true // 2. \D // 意义: 表示字符串中 必须至少包含一位 非数字内容 var reg = /\D/ var res = reg.test('1234%567') console.log(res) // true
3. \s : 表示 一位 空白 内容 (空格/缩进/制表符/...)
4. \S : 表示 一位 非空白 内容// 3. \s // 意义: 表示 字符串中 必须要含有至少一位 空白内容 var reg = /\s/ // 使用 reg 这个正则去检测 'abcd' 这个字符串是否符合 规则 // 如果符合返回 true // 如果不符合返回 false var res = reg.test('a bcd') console.log(res) // true // 4. \S // 表示 字符串 中必须包含一位 非空白内容 var reg = /\S/ var res = reg.test(' $ ') console.log(res) // true
5. \w : 表示 一位 数字(0-9)字母(a-zA-Z)下划线(_) 中的任意一个
6. \W : 表示 一位 非数字字母下划线的任意内容// 5. \w // 表示字符串中 必须包含一位 数字或者字母或者下划线 var reg = /\w/ var res = reg.test('!@#%^_^&*()!') console.log(res) // true // 6. \W // 表示字符串中必须包含一位 数字字母下划线 以外的内容 var reg = /\W/ var res = reg.test('123ab@_') console.log(res) // true
7. 点( . ) : 表示 一位 非换行以外的任意内容都行
// 7. 点(.) // 意义: 表示字符串中必须包含一位 非换行以外的任意内容 var reg = /./ // 在字符串内 \n 表示换行的意思 var res = reg.test(' \n ') console.log(res) // 打印 => true // 小问题 // 我需要检测一个 小数 var reg = /\d.\d/ var res = reg.test('1.5') console.log(res) // true
8. \ : 表示 转义符
=> 把有意义的符号转换成没有意义的普通文本
=> 把没有意义的文本转换成有意义的符号// 8. \ // 要求, 字符串中必须包含一个 点 文本 // 在正则里面, 点(.) 是有特殊意义的 // 使用转义符和 点(.) 连接 // 变成 \. 把有意义的 点 转换成没有意义的 点 文本 // 小测试 // 表示字符串中必须包含一位 点 文本内容 var reg = /\d\.\d/ var res = reg.test('2.5') console.log(res) // true
4. 元字符 - 边界符号
1. ^ : 表示 字符串 开头
2. $ : 表示 字符串 结尾
+ 注意: 当 开头^ 和 结尾$ 一起使用的时候
=> 表示的是 : 从开头到结尾// 1. ^ // 表示字符串中至少包含一位数字 var reg1 = /\d/ // 表示字符串中必须以一个数字开头 var reg2 = /^\d/ console.log(reg1, 'a1b', reg1.test('a1b')) // true console.log(reg2, 'a1b', reg2.test('a1b')) // false
// 2. $ // 表示字符串中至少包含一位数字 var reg1 = /\d/ // 表示字符串中必须以一个数字结尾 var reg2 = /\d$/ console.log(reg1, 'a1b', reg1.test('a1b')) // true console.log(reg2, 'ab1', reg2.test('ab1')) // true
// 小测试: // 规则: 字符串开头 一位数字 字符串结尾 // 表示: 字符串只能由一位数字组成 var reg = /^\d$/ console.log(reg.test('1')) // true console.log(reg.test('1a2')) // false console.log(reg.test('123')) // false
// 问题: // 需求: 验证一个 18 为的身份证号, 不考虑最后一位是 字母 var reg = /^\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d$/ // 此方法不合适
5. 元字符 - 修饰符 - 限定符
+ 注意 : 一个修饰符只是用来修饰 符号前面 ** 一个 ** 内容的出现次数
1. * : 表示出现 0 ~ 多次// 1. * : 0 ~ 多次 // * 修改 \d 这个符号出现的次数 // 表示字符串从开头到结尾数字出现至少 0 次 var reg = /^\d*$/ console.log(reg.test('')) // true console.log(reg.test('1')) // true console.log(reg.test('12')) // true
2. + : 表示出现 1 ~ 多次
// 2. + : 1 ~ 多次 // + 修改 \d 这个符号出现的次数 // 表示字符串从开头到结尾数字出现至少 1 次 var reg = /^\d+$/ console.log(reg.test('')) // false console.log(reg.test('1')) // true console.log(reg.test('12')) // true
3. ? : 表示出现 0 ~ 1 次
// 3. ? : 0 ~ 1 次 // ? 修改 \d 这个符号出现的次数 // 表示字符串从开头到结尾数字出现 0 次或者 1 次 var reg = /^\d?$/ console.log(reg.test('')) // true console.log(reg.test('1')) // true console.log(reg.test('12')) // false
4. {n} : 表示出现 指定 n 次
// 4. {n} // {n} 修改 \d 这个符号指定两次 // 表示字符串从开头到结尾数字出现 一次 var reg = /^\d{1}$/ console.log(reg.test('')) // false console.log(reg.test('1')) // true console.log(reg.test('12')) // false
5. {n,} : 表示出现 至少 n 次, n ~ 多次
=> {0,} 等价于 * : 0 ~ 多次
=> {1,} 等价于 + : 1 ~ 多次// 5. {n,} // 表示字符串从开头到结尾数字至少出现 一次 var reg = /^\d{1,}$/ console.log(reg.test('')) // false console.log(reg.test('1')) // true console.log(reg.test('12')) // true
6. {n,m} : 表示出现 n ~ m 次
=> {0,1} 等价于 ? : 0 ~ 1 次// 6. {n,m} // 表示字符串从开头到结尾数字出现 1 ~ 2 次 var reg = /^\d{1,2}$/ console.log(reg.test('')) // false console.log(reg.test('1')) // true console.log(reg.test('12')) // true console.log(reg.test('123'))// false
// 小练习 // 表示 字符串中 包含一个 两位数字 就行 var reg = /\d{2}/ console.log(reg.test('1')) // false console.log(reg.test('12')) // true console.log(reg.test('123')) // true
// 问题 : 表示 字符串中 只能是 两位数字 组成 var reg = /^\d{2}$/ console.log(reg.test('1')) // false console.log(reg.test('12')) // true console.log(reg.test('123')) // false
// 小练习2 // 这个 {2} 修饰符只是修饰前面一个 c var reg = /^abc{2}$/ console.log(reg.test('abcabc')) // false console.log(reg.test('aabbcc')) // false console.log(reg.test('abcc')) // true
6. 元字符 - 特殊符号
1. ( )
=> 意义1: 一个整体
=> 意义2: 单独捕获
-> 进行单独捕获的, 在使用 exec 方法的时候
-> 会从返回值的 [1] 位置开始依次是每一个小括号
-> 小括号的顺序: 从左向后开始依次数 小括号开始
=> 如果我只想要含义1, 不需要含义2
-> (?:) 匹配但不捕获// 1. () 一个整体 // 因为 () 把 abc 包裹起来了, 所以 {2} 修饰的是前面 () 内的全部内容 var reg = /^(abc){2}$/ console.log(reg.test('abcabc')) // true
2. | 占位 或
=> 一般和 ( ) 连用
=> 意义: 或者的意思 , 表示一个内容或者另一个内容
=> 注意: 或的边界, 要么是 ( ), 要么就到正则的边界// 2. | // 意义字符串从开头到结尾必须是 abd 或者 acd var reg = /^a(b|c)d$/ console.log(reg.test('abd')) // true console.log(reg.test('acd')) // true console.log(reg.test('abcd')) // false
// | 踩坑 1 : // 正则: 比如 => 汽车{2} // 汽车: 可以是 奥迪 也可以是 宝马 (奥迪|宝马) // {2} 修饰的 (abc|def) // {2} 修饰的是一个 (), 需要 **一个整体内容** 出现两次 // () 表示一个 **整体**, {2} 表示 **整体** 必须出现两次 // **一个整体内容**: 可以是 'abc' 也可以是 'def' var reg = /^(abc|def){2}$/ console.log(reg.test('abcabc')) // true console.log(reg.test('defdef')) // true console.log(reg.test('abcdef')) // true console.log(reg.test('defabc')) // true
// | 踩坑 2 : // 没有 () 的时候, | 分开的是整个正则的左右 , 一直延伸到边界 // ^ab 或者 cd$ // 表示字符串以 ab 开头或者 以 cd 结尾都行 var reg = /^ab|cd$/ console.log(reg.test('abcd')) // true console.log(reg.test('ababc')) // true console.log(reg.test('1234cd')) // true console.log(reg.test('ab')) // true console.log(reg.test('cd')) // true
3. [ ]
=> 意义: 包含( 任选 )
=> 注意: 一个 [ ] 内可以写多个内容, 但是**一个 [ ] 只占一个字符位置**
=> 表示 [ ] 内的任意一个都行
=> [0-9] 等价于 \d
=> [0-9a-zA-Z_] 等价于 \w// 3. [] // 表示字符串从开头到结尾只能由一位字符组成 // 这一位字符可以是 a 可以是 b 可以是 c 可以是 d // [abcd] 等价于 (a|b|c|d) var reg = /^[abcd]$/ console.log(reg.test('a')) // true console.log(reg.test('b')) // true console.log(reg.test('c')) // true console.log(reg.test('d')) // true console.log(reg.test('e')) // false console.log(reg.test('aa')) // false
4. [^]
=> 意义: 非
=> 注意: 一个 [^] 内可以写多个内容, 但是**一个 [^] 只占一个字符位置**
=> 表示 [^] 内的任意一个都不行
=> [^0-9] 等价于 \D
=> [^0-9a-zA-Z_] 等价于 \W// 4. [^] // 表示字符串从开头到结尾只能由一位字符组成 // 这一位字符不能是 a 不能是 b 不能是 c 不能是 d, 其他的都可以(非 abcd 内的任意一个) var reg = /^[^abcd]$/ console.log(reg.test('a')) // false console.log(reg.test('b')) // false console.log(reg.test('c')) // false console.log(reg.test('d')) // false console.log(reg.test(' ')) // true console.log(reg.test('1')) // true
5. - 中划线
=> 意义: 至 或者 到
=> 注意: 需要和 [ ] 或者 [^] 连用的符号
=> 注意: 必须需要 ASCII 编码连着的才可以使用// 5. - // [0-9] 等价于 [0123456789] // 表示字符串从开头到结尾只能由一位字符组成 // 这一位字符可以是 0 - 9 中的任意一个 var reg = /^[0-9]$/ console.log(reg.test('0')) // true console.log(reg.test('1')) // true console.log(reg.test('8')) // true console.log(reg.test('9')) // true console.log(reg.test('10')) // false
=> [0-9] 等价于 \d
=> [^0-9] 等价于 \D
=> [0-9a-zA-Z_] 等价于 \w
=> [^0-9a-zA-Z_] 等价于 \W
验证数字在某一个范围内
+ 需求:
=> 字符串只能由数字组成
=> 并且范围在 0 ~ 255
// 不行
var reg = /^[0-255]$/
console.log(reg.test('0')) // true
console.log(reg.test('1')) // true
console.log(reg.test('2')) // true
console.log(reg.test('5')) // true
console.log(reg.test('3')) // false
console.log(reg.test('4')) // false
/*
+ 分析:
=> [0-255]
-> 0 ~ 2 和 5 和 5
-> 能验证的是 0 1 2 5
=> 需要把数字拆开看
-> 只有一位数: \d
-> 只有两位数: \d{2}
-> 三位数字:
+ 1 开头的三位数: 1\d{2}
+ 2 开头的三位数:
=> 2 开头, 中间一位是 0 - 4(20 ~ 24 开头的三位数): 2[0-4]\d
=> 2 开头, 中间一位是 5(25 开头的三位数 0 1 2 3 4 5): 25[0-5]
+ 简化 :
=> /^(\d|\d{2}|1\d{2}|2[0-4]\d|25[0-5])$/
=> \d 和 \d{2} 两个合在一起 简化成 \d{1,2}
=> \d{1,2} 和 1\d{2} 两个合在一起 简化成 1?\d{1,2}
*/
// 正则表达式
// var reg = /^(\d|\d{2}|1\d{2}|2[0-4]\d|25[0-5])$/
// var reg = /^(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])$/
var reg = /^(1?\d{1,2}|2[0-4]\d|25[0-5])$/
for (var i = 0; i < 300; i++) {
console.log(i, reg.test(i))
}
// 0 ~ 666
// var reg = /^[0-5]?\d{1,2}|6[0-5]\d|66[0-6]$/
7. 正则 - 标识符
+ 书写在正则表达式的外面, 专门用来修饰整个正则表达式的符号
1. i ( ignore )
=> 作用 : 表示忽略大小写不计
2. g ( global )
=> 作用: 全局
=> 当你进行捕获的时候
-> 后一次捕获会从前一次捕获的结束位置开始查找// 标识符 i 修饰整个正则表达式 // 表示该正则在验证字符串的时候忽略大小写不计 var reg = /abcd/i console.log(reg.test('abcd')) // true console.log(reg.test('ABCD')) // true
8. 正则的两个特性
1. 懒惰性 : 每一次的捕获都会默认从 原始字符串的索引 0 开头位置 开始去检测
=> 解决: 使用全局标识符 g
2. 贪婪性 : 在一次的匹配中尽可能的多获取内容
=> 贪婪匹配 : 能拿多少拿多少 尽可能 多 的匹配内容
=> 非贪婪匹配 : 能拿多少拿多少 尽可能 少 的匹配内容
=> 如何进入非贪婪模式
-> 需要使用非贪婪限定符
=> 在原先的修饰符后面再加写一个 问号(?)
-> *? 0 ~ 多次, 但是 0 次能解决问题, 就不在多
-> +? 1 ~ 多次, 但是 1 次能解决问题, 就不在多
-> ?? 0 ~ 1次, 0 次能解决问题, 就不去管 1 次
-> {n,}?
-> {n,m}?
贪婪修饰符 非贪婪修饰符
* *?
+ +?
? ??
{n,} {n,}?
{n,m} {n,m}?// 2. 正则的贪婪性 var str = '我要捕获的标签结构 : <p class="box">你好 世界</p><span>hello world</span> ^_^' // 这里使用的是 +, 表示 1 ~ 多次 var reg = /<.+>/ var res = reg.exec(str) console.log(res) // 非贪婪匹配 // 使用的的是 +?, 非贪婪限定符, 表示 1 ~ 多次 var reg = /<.+?>/ var res = reg.exec(str) console.log(res)
9. 字符串和正则合作的方法
+ 正则常用方法: 正则.xxx( )
+ 字符串常用方法: 字符串.xxx( )1. replace( )
=> 语法:
-> 字符串.replace('换下字符', '换上字符')
-> 字符串.replace(正则表达式, '换上字符')
=> 返回值: 替换好的字符串
-> 如果第一个参数传递字符串的时候, 只能替换一个
-> 如果第一个参数传递正则表达式, 但是没有全局标识符 g, 只能替换一个
-> 如果第一个参数传递的是正则, 并且 有 全局标识符 g, 那么全部替换 , 有多少替换多少// 1. replace() var str = 'fctyHHguHHijHHknHHjgHHhfMMctMMdrMMftNNfyNNguNNhijk' console.log(str) var r1 = str.replace('HH', '**') console.log(r1) var r2 = str.replace(/HH/, '**') console.log(r2) var r3 = str.replace(/HH/g, '**') console.log(r3)
// 问题: 替换敏感词 // 准备一个敏感词数组 var arr = ['HH', 'MM', 'NN'] // 只要有一个正则 /(HH|MM|NN)/g // 1. 把数组 arr 拼接成 字符串 var s = '(' + arr.join('|') + ')' // 2. 创建正则表达式 // 因为需要使用 s 这个变量, 只能使用内置构造函数方式 var reg = new RegExp(s, 'g') // 3. 开始替换 // 使用 字符串方法 replace 和 正则合作进行敏感词替换 var res = str.replace(reg, '**') console.log(res) // 打印 => fcty**gu**ij**kn**jg**hf**ct**dr**ft**fy**gu**hijk
2. search( )
=> 语法:
-> 字符串.search(字符串片段)
-> 字符串.search(正则表达式)
=> 作用: 在原始字符串内查找指定内容
=> 返回值:
-> 原始字符串内有指定 字符串片段 或 满足正则表达式的内容, 那么就是这个内容的 索引
-> 原始字符串内没有指定内容, 那么就是 -1// 2. search var str = 'wx123hjn' var res = str.search('1234') console.log(res)// 没有指定的1234内容 => -1 var res = str.search(/\d{3}/) console.log(res) // 索引 2
3. match( )
=> 语法:
-> 字符串.match(字符串片段)
-> 字符串.match(正则表达式)
=> 返回值: 从原始字符串中捕获满足条件的片段
=> 注意: 如果你的参数传递的是字符串或者没有全局标识符 g 的正则,
那么结果和 exec 返回值一模一样
-> 当你的正则有全局标识符 g 的时候, 那么返回值是一个 数组
-> 能从原始字符串内捕获多少, 数组里就有多少内容
-> 数组里面是原始字符串中的所有符合正则标准的片段// 3. match() var str = 'afsd123ds222dfs456sdfasd789sdfsdf' var res = str.match('123') console.log(res) var res = str.match(/\d{3}/) console.log(res) var res = str.match(/\d{3}/g) console.log(res)