判断是否匹配成功
- child::
search()
作用: 检索与正则表达式相匹配的值
语法:
字符串.search(正则表达式)//匹配失败返回-1实例:
指向原始笔记的链接var re = /apples/gi; var str = "Apples are round, and apples are juicy."; if (str.search(re) == -1 ) { console.log("Does not contain Apples" ); } else { console.log("Contains Apples" ); }
使用正则表达式替换字符串
- child::
正则查找并替换 内置封装方法 replace()
1. 作用:
1. 用指定字符串替换匹配的字符串
2. 得到所有匹配项的索引
通过数组的push()把每个匹配项的索引位置都压入数组中
注意:
- 如果给replace传入第一个参数是字符串, 则只会替换第一个
2. 语法:
1. 语法一:
字符串.replace(正则表达式,"用于替换的字符串")//返回替换后的字符串1.1. 说明:
"用于替换的字符串"具有特殊意义的转义字符:$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。 $& 整个匹配项。 $` 位于匹配子串左侧的文本。 $' 位于匹配子串右侧的文本。 $$ 表示$这个符号。2. 语法二:
字符串.replace(正则表达式,function(匹配项,匹配组1,匹配组2,匹配组3,...,索引位置,原字符串,命名捕获组对象){})//返回替换后的字符串2.1. 说明:
- 遍历将每一个匹配项以及相应参数传给处理函数, 然后以该函数的返回值来替换该匹配项
- 传入该回调函数的参数实际上就是从RegExpMatch解包而来的
索引位置指的是匹配项第一个字符在原字符串中的位置- 每个匹配项的索引位置在替换过程是不会改变的, 无论替换多长的字符串
匹配组1, 匹配组2, 匹配组3,...的数量由具体的正则表达式确定- 所以要想使用索引位置和原字符串, 推荐把第二个参数往后都全部放进一个数组中, 即(
...args) - 然后再访问数组的倒数元素 js 数组倒数元素
- 所以要想使用索引位置和原字符串, 推荐把第二个参数往后都全部放进一个数组中, 即(
命名捕获组对象只会在正则表达式存在命名捕获组的时候才会被传递进回调函数中- 其中有一组键值对, 键名为捕获组的名字, 键值为捕获组中的匹配字符串
3. 2. 实例 :
替换与正则表达式匹配的子串
var re = /(\w+)\s(\w+)/; var str = "zara ali"; var newstr = str.replace(re, "$2, $1"); console.log(newstr); // ali, zara
指向原始笔记的链接let str = "Hi I'm Tony"; let result =str.replace(/\b\w+\b/g,function(word,...args){ console.log("匹配项:"+word+" 位置:"+args.slice(-2)[0]+" 原字符串"+args.slice(-1)[0]); return "qql1"; }) console.log(result); /*输出: 匹配项:Hi 位置:0 原字符串Hi I'm Tony 匹配项:I 位置:3 原字符串Hi I'm Tony 匹配项:m 位置:5 原字符串Hi I'm Tony 匹配项:Tony 位置:7 原字符串Hi I'm Tony qql1 qql1'qql1 qql1 */
获得首个匹配项
- child::
match()
参数
- child::正则表达式
- 注意!:正则表达式不能使用全局匹配模式g
返回值
- 如果没有匹配,则返回
null - 匹配则返回:
RegExpMatch
有着一些特殊属性的数组
- 匹配项数组中每一个元素都是捕获组
- 从1开始数
- 第0项为整个匹配项
- 匹配项数组中的特殊属性:
index, 匹配项第一个字符在原字符串中的索引input, 原字符串groups, 是一个对象- 键名为捕获组名字
- 键值为捕获内容
- 匹配项数组中每一个元素都是捕获组
- child::正则表达式
获取所有匹配项
- child::
js 正则匹配 matchAll()
适用范围:
- 获取正则表达式匹配的完整信息
梗概:
字符串.matchAll(正则表达式)- 无论匹配成功与否, 返回一个不可重复迭代的迭代器
- 如果没有匹配到东西, 则迭代器里面没有东西可以迭代
- 迭代器内容为RegExpMatchArray类型
- 每个元素都是RegExpMatch,表示一个匹配项
- child::判断迭代器内容是否为空
实例:
指向原始笔记的链接let str = "hello world" let matches = str.matchAll(/l/g) console.log(Array.from(matches)) /* [ [ 'l', index: 2, input: 'hello world', groups: undefined ], [ 'l', index: 3, input: 'hello world', groups: undefined ], [ 'l', index: 9, input: 'hello world', groups: undefined ] ] */