javascript中String.match()与RegExp.exec()的区别说明
JavaScript string 说明 区别 match exec REGEXP
2023-06-13 09:14:43 时间
1.这两个方法,如果匹配成功,返回一个数组,匹配失败,返回null。
2.当RegExp的global属性为false时,这两个方法的返回数组是一样的。
数组的第0个元素是整个pattern的第一个匹配字符串,接下来的元素是pattern第一个匹配中的子匹配字符串。
此外,数组还有index和input两个额外属性,index是匹配字符串的起始位置,input是整个输入字符串。
此时,RegExp的lastIndex属性一直是0。
demo:
复制代码代码如下:
2.当RegExp的global属性为false时,这两个方法的返回数组是一样的。
数组的第0个元素是整个pattern的第一个匹配字符串,接下来的元素是pattern第一个匹配中的子匹配字符串。
此外,数组还有index和input两个额外属性,index是匹配字符串的起始位置,input是整个输入字符串。
此时,RegExp的lastIndex属性一直是0。
demo:
vars="thisisastring";
varp=/\b\w*(i)s\b/;
varrm=s.match(p);
varre=p.exec(s);
console.log("match_array:"+JSON.stringify(rm));
console.log("match_array_index:"+rm.index);
console.log("match_array_input:"+rm.input);
console.log("----------------------------");
console.log("exec_array:"+JSON.stringify(re));
console.log("exec_array_index:"+re.index);
console.log("exec_array_input:"+re.input);
显示结果为(firefox控制台):
match_array:["this","i"]
match_array_index:0
match_array_input:thisisastring
----------------------------
exec_array:["this","i"]
exec_array_index:0
exec_array_input:thisisastring
3.当RegExp的global属性为true时,返回的数组是不同的。
match方法返回的数组包含着所有匹配字符串,没有子匹配字符串和额外属性。此时,lastIndex属性无效。
exec方法返回的数组格式与global为false时一样,只是此时RegExp的lastIndex属性有效,匹配是从lastIndex所指示的字符开始的,并且方法执行后会将lastIndex置为本次匹配字符串的下一个字符处,所以循环执行exec方法时会依次匹配整个字符串,直到字符串最后返回null,并将lastIndex置0。
demo:
vars="thisisastring";
varp=/\b\w*(i)s\b/g;
varrm=s.match(p);
varre;
console.log("match_array:"+JSON.stringify(rm));
console.log("match_array_index:"+rm.index);
console.log("match_array_input:"+rm.input);
while(re=p.exec(s)){
console.log("----------------------------");
console.log("exec_array:"+JSON.stringify(re));
console.log("exec_array_index:"+re.index);
console.log("exec_array_input:"+re.input);
console.log("regexp_lastIndex:"+p.lastIndex);
}
console.log("----------------------------");
console.log("exec_array:"+re);
console.log("regexp_lastIndex:"+p.lastIndex);
结果:
match_array:["this","is"]
match_array_index:undefined
match_array_input:undefined
----------------------------
exec_array:["this","i"]
exec_array_index:0
exec_array_input:thisisastring
regexp_lastIndex:4
----------------------------
exec_array:["is","i"]
exec_array_index:5
exec_array_input:thisisastring
regexp_lastIndex:7
----------------------------
exec_array:null
regexp_lastIndex:0
综上:
1.在没有g标识符时,match和exec方法效果是一样的;有g标识符时,exec方法可以提供最完整的匹配结果。
2.这里顺便提一下RegExp.test()方法,它是exec方法的简化版,有匹配结果就返回true,没有匹配结果就返回false,执行过程与exec是一样的。相当于(p.exec(s)!=null)。
3.RegExp的lastIndex属性在有g标识符,且在exec和test方法中是有效的,其他地方是无效的。
相关文章
- javascript 高级教程 视频_精通JavaScript
- java string 转 object_java 类型转换 Object和String互转
- javascript html转换成markdown,如何使用Turndown使用JavaScript将HTML转换为Markdown[通俗易懂]
- Web前端开发JavaScript基础
- java作用域-我是这样理解JavaScript中作用域
- JavaScript 中的对象
- JavaScript学习总结(十六)——Javascript闭包(Closure)详解编程语言
- JavaScript数据类型-数值(number)和字符串(string)详解编程语言
- javascript 正则表达式的组、全局、RegExp.exec()和string.match()区别详解编程语言
- javascript之水平横向滚动歌词同步的应用
- 可实现多表单提交的javascript函数
- Javascript更新JavaScript数组的uniq方法
- JavaScript拖拽实现(附注释),最经典简单短小精悍!
- javascript线性渐变三
- 实现JavaScript中继承的三种方式
- javascript下利用arguments实现string.format函数
- javascript延迟加载技术(lazyload)简单实现
- javascript笔记String类replace函数的一些事
- JavaScript入门之事件、cookie、定时等
- javascript中将Object转换为String函数代码(jsonstr)
- javascript学习笔记(三)String字符串类型介绍
- javascript学习笔记(十一)正则表达式介绍
- Javascript拓展String方法小结
- 为Javascript中的String对象添加去除左右空格的方法(示例代码)
- javascript按键事件(兼容各浏览器)
- javascript判断是否按回车键并解决浏览器之间的差异
- Javascript实现单张图片浏览