javascript 正则表达式的组、全局、RegExp.exec()和string.match()区别详解编程语言
2023-06-13 09:11:53 时间
javascript的正则表达式,基本用法可以参考这个 ;在会了基本用法后,有几个概念一定要注意,组、全局、RegExp.exec和String.match的区别。
全局是标志是否全局匹配,通俗点说就是后一次匹配从上次匹配处往后匹配。比如
var reg = /.at/g; var str ="1at,2at,3at"; console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str));
结果
[ 1at, index: 0, input: 1at,2at,3at ] [ 2at, index: 4, input: 1at,2at,3at ] //本次匹配,从1at后边往后匹配 [ 3at, index: 8, input: 1at,2at,3at ] //本地匹配,从2at后边往后匹配 null
对应的我们去掉全局匹配
var reg = /.at/; var str ="1at,2at,3at"; console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str));
[ 1at, index: 0, input: 1at,2at,3at ] //每次匹配都是从最开始搜寻 [ 1at, index: 0, input: 1at,2at,3at ] [ 1at, index: 0, input: 1at,2at,3at ] [ 1at, index: 0, input: 1at,2at,3at ]
组主要用来获取匹配结果,首先匹配全局正则,然后匹配第1个子表达式、第2个子表达式,依次类推….
var reg = /(.a)t/; var str ="1at,2at,3at"; console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str));
首先匹配.at ,然后再匹配 .a, 所以每次匹配有两个
[ 1at, 1a, index: 0, input: 1at,2at,3at ] [ 1at, 1a, index: 0, input: 1at,2at,3at ] [ 1at, 1a, index: 0, input: 1at,2at,3at ] [ 1at, 1a, index: 0, input: 1at,2at,3at ]
学完了全局和组,再来个复杂点的正则
var reg = /(.a)t/g; var str ="1at,2at,3at"; console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str));
[ 1at, 1a, index: 0, input: 1at,2at,3at ] [ 2at, 2a, index: 4, input: 1at,2at,3at ] [ 3at, 3a, index: 8, input: 1at,2at,3at ] nullRegExp.exec() VS String.match()
正则表达式的exec()与字符串的match()很像,
不带全局表达式不带全局标志时,两者一样
var reg = /(.a)t/; var str ="1at,2at,3at"; console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str)); console.log("--------------------------"); console.log(str.match(reg));
[ 1at, 1a, index: 0, input: 1at,2at,3at ] [ 1at, 1a, index: 0, input: 1at,2at,3at ] [ 1at, 1a, index: 0, input: 1at,2at,3at ] [ 1at, 1a, index: 0, input: 1at,2at,3at ] -------------------------- [ 1at, 1a, index: 0, input: 1at,2at,3at ]全局表达式
带全局表达式时,string.match()一次返回表达式、子表达式匹配结果,但不返回所以及输入项;
var reg = /(.a)t/g; var str ="1at,2at,3at"; console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str)); console.log("--------------------------"); console.log(str.match(reg));
[ 1at, 1a, index: 0, input: 1at,2at,3at ] [ 2at, 2a, index: 4, input: 1at,2at,3at ] [ 3at, 3a, index: 8, input: 1at,2at,3at ] null -------------------------- [ 1at, 2at, 3at ]
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20291.html
cjavaxml相关文章
- 实现JavaScript语言解释器(一)
- JavaScript 正则表达式全面总结
- JavaScript高级(11) 完结撒花
- javascript html转换成markdown,如何使用Turndown使用JavaScript将HTML转换为Markdown[通俗易懂]
- javascript 怎么阻止事件冒泡
- JavaScript 面向对象
- JavaScript 是如何成为一门严肃的编程语言的
- Javascript正则表达式测试网页
- [js]用JAVASCRIPT正则表达式限制文本字节数的代码
- Javascript更新JavaScript数组的uniq方法
- javascript深拷贝
- Javascript中使用exec进行正则表达式全局匹配时的注意事项
- javascript学习笔记(九)js对象设计模式
- javascript学习笔记(十一)正则表达式介绍
- 浅谈Javascript事件模拟
- 常用一些Javascript判断函数
- JavaScript设置IFrame高度自适应(兼容各主流浏览器)
- javascript修改IMG标签的src问题
- 调试JavaScript中正则表达式中遇到的问题