【JS】简述seacrch、match、exec、test
来源:互联网 发布:花生壳远程监控软件 编辑:程序博客网 时间:2024/06/04 17:54
背景
前段时间做一个输入验证时,需要判断字符串中是否存在汉字,趁机复习下正则表达式吧。
汉字的判断不同于字母数字和符号,在正则规则中,他们都有自身的字符集,汉字则没有。所以我们使用汉字的Unicode编码进行判断,汉字的编码范围是\u4E00-\u9FA5,但是要注意的是这个编码范围是ES5中的范围,在ES6中对汉字(繁体字)的编码进行了优化,对ES6中Unicode编码感兴趣的可以自己去查阅下。
进入正题,本文就以验证汉字为题,简单复习下JS中search、match、exec、test这四个API。
正则表达式
let str = ‘[abc,第一处,abc,第二处]’;
let reg = /([\u4E00-\u9FA5]+)/;
let reg_g = /([\u4E00-\u9FA5]+)/g;
首先创建我们测试使用的包含汉字的字符串,以及带有参数g和不带有参数g的正则表达式。接下来看下他们的区别。
search
说明:返回与正则表达式查找内容匹配的第一个子字符串的位置(偏移位)。
let rs_search = str.search(reg);
let rs_search_g = str.search(reg_g);
console.log(rs_search,rs_search_g); //5 5
从输出结果来看,带有g和不带有g的结果是一致的。
这个方法有点类似与indexOf,都是返回字符出现的第一个位置。查找失败则返回-1。
match
说明:使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。
let rs_match = str.match(reg); //[ ‘第一处’, ‘第一处’, index: 5, input: ‘[abc,第一处,abc,第二处]’ ]
let rs_match_g = str.match(reg_g); //[ ‘第一处’, ‘第二处’ ]
不带参数g:它的返回值是匹配到的第一个子串的详细信息,包含value,index,input。
参数g:它的返回值是匹配到的所有子串的value,不包含子串的详细信息。
exec
说明:用正则表达式模式在字符串中查找,并返回该查找结果的第一个值(数组),如果匹配失败,返回null。
let rs_exec = reg.exec(str); //[ ‘第一处’, ‘第一处’, index: 5, input: ‘[abc,第一处,abc,第二处]’ ]
let rs_exec_g = reg_g.exec(str); //[ ‘第一处’, ‘第一处’, index: 5, input: ‘[abc,第一处,abc,第二处]’ ]
在这里可以看到有参数g时,返回值时一样的。但是它们还是有区别的,带有参数g时,可以使用for循环,继续匹配下一个子串。
let rs_exec_g = [];
while((rs_exec_g = reg_g.exec(str)) != null){ //使用g,不然会无限循环
/**
*两次输出,匹配不到自动结束匹配
*
*index: 5 , value: 第一处,第一处
*index: 13 , value: 第二处,第二处
*/
console.log(index: ${rs_exec_g.index} , value: ${rs_exec_g}
)
}
注意:使用while时,必须带有参数g,不然会变成一个无线循环,以为返回值一直不为空。
test
说明:返回一个 Boolean 值,它指出在被查找的字符串中是否匹配给出的正则表达式。
let rs_test = reg.test(str); //true
let rs_test_g = reg_g.test(str); //true
类似与exec,只是执行单行语句时,有无参数g,返回值一致。但是,带有参数g时,可以使用参数g,继续匹配下一个子串。
let rs_test_g;
while((rs_test_g = reg_g.test(str)) == true){ //使用g,不然会无限循环
console.log(rs_test_g)
}
注意: 与exec一样,必须带参数g。
总结
- search与match的写法一致,都是String的API
- exec与test的写法一致,都是RegExp的API
- exec与test的参数正则表达式带有参数g时,可以使用循环遍历原因与lastIndex有关,lastIndex不会被重置为0
额外加一句,MarkDown文本编辑器,使用起来挺顺手的,符合程序员的编码习惯>_<
- 【JS】简述seacrch、match、exec、test
- 关于js的正则 test,match,exec
- 关于js的正则 test,match,exec
- Js正则基础篇 test match exec
- js 中test,exec,match方法
- js正则函数match、exec、test
- [ JS 进阶 ] test, exec, match, replace
- js 正则表达式 RegExp.exec RgeExp.test String.match
- Js 正则表达式对象(方法:exec、test、match、search)
- js正则表达test、exec和match的区别
- js正则表达exec、match、test和replace、replaceAll
- JS中exec,match,replace,test方法对比
- js正则表达test、exec和match的区别
- JS 中 正则表达式 match test exec的区别
- JS中exec,match,replace,test方法对比
- js的正则表达式 test, exec, match, replace
- js正则表达test、exec和match的区别
- js正则函数match、search、exec、test使用介绍集合
- Atitit 常用数据校验规则
- Android 启动活动的最佳写法
- Atitit 签名规范 attilax总结 安全签名规范 v2 r99.docx
- PTA 计算高考状元
- ConvenientBanner使用
- 【JS】简述seacrch、match、exec、test
- 排序算法系列之(二)——冒泡排序名字最为形象的一个
- nginx学习资料
- IntelliJ IDEA :Error(1, 1) java 非法字符 'ufeff'
- Atitit 身份证 证件编码规范
- oracle学习总结(二)
- 中国科学院大学 2015 年招收攻读硕士学位研究生入学统一考试试题科目名称:计算机学科综合(专业)
- 中国首个以“智能制造”主题的专场招聘会落地广州!
- [Android][第一行代码][第 7 章 内容提供器]