js正则表达式中test,exec,match方法的区别说明


Posted in Javascript onJanuary 29, 2014

js正则表达式中test,exec,match方法的区别说明

test
test 返回 Boolean,查找对应的字符串中是否存在模式。
var str = "1a1b1c";
var reg = new RegExp("1.", "");
alert(reg.test(str)); // true

exec
exec 查找并返回当前的匹配结果,并以数组的形式返回。
var str = "1a1b1c";
var reg = new RegExp("1.", "");
var arr = reg.exec(str);
如果不存在模式,则 arr 为 null,否则 arr 总是一个长度为 1 的数组,其值就是当前匹配项。arr 还有三个属性:index 当前匹配项的位置;lastIndex 当前匹配项结束的位置(index + 当前匹配项的长度);input 如上示例中 input 就是 str。

exec 方法受参数 g 的影响。若指定了 g,则下次调用 exec 时,会从上个匹配的 lastIndex 开始查找。
var str = "1a1b1c";
var reg = new RegExp("1.", "");
alert(reg.exec(str)[0]);
alert(reg.exec(str)[0]);
上述两个输出都是 1a。现在再看看指定参数 g:
var str = "1a1b1c";
var reg = new RegExp("1.", "g");
alert(reg.exec(str)[0]);
alert(reg.exec(str)[0]);
上述第一个输出 1a,第二个输出 1b。

match
match 是 String 对象的一个方法。
var str = "1a1b1c";
var reg = new RegExp("1.", "");
alert(str.match(reg));
match 这个方法有点像 exec,但:exec 是 RegExp 对象的方法;math 是 String 对象的方法。二者还有一个不同点,就是对参数 g 的解释。
如果指定了参数 g,那么 match 一次返回所有的结果。
var str = "1a1b1c";
var reg = new RegExp("1.", "g");
alert(str.match(reg));
//alert(str.match(reg)); // 此句同上句的结果是一样的
此结果为一个数组,有三个元素,分别是:1a、1b、1c。

JavaScript中经常用到正则表达式, 而正则表达式中经常用到Match和Test这两个函数,当然还有Exec. 这里以代码实例来区分它们之间的不同吧.

Match Example

var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/gi;
var rs = str.match(regexp);
//rs= Array('A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e');

Test Example
var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/gi;
var rs = regexp.test(str);
// rs = true; boolean

Exc Example
var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/gi;
var rs;
while ((rs = regexp.exec(str)) != null)
{
    document.write(rs);
    document.write(regexp.lastIndex);
    document.write("<br />");
}
OUTPUT
---------------------------------
A    1
B   2
C   3
D   4
E   5
a   27
b   28
c   29
d   30
e   31

Another   Exc Example
var regexp = /ab*/g;
var str = "abbcdefabh";
var rs;
while ((rs = regexp.exec(str)) != null)
{
    document.write(rs);
    document.write(regexp.lastIndex);
    document.write("<br />");
}
OUTPUT
---------------------------------
abb   3
ab     9
Javascript 相关文章推荐
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
Jan 09 Javascript
javascript String 对象
Apr 25 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
Feb 03 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
Jul 07 Javascript
jQuery的one()方法用法实例
Jan 19 Javascript
javascript实现设置、获取和删除Cookie的方法
Jun 01 Javascript
JS实现的3D拖拽翻页效果代码
Oct 31 Javascript
AngularJS表格添加序号的方法
Mar 03 Javascript
vue 父组件调用子组件方法及事件
Mar 29 Javascript
Node.js log4js日志管理详解
Jul 31 Javascript
iconfont的三种使用方式详解
Aug 05 Javascript
vue实现PC端分辨率适配操作
Aug 03 Javascript
js的正则test,match,exec详细解析
Jan 29 #Javascript
js正则表达exec与match的区别说明
Jan 29 #Javascript
jquery实现input输入框实时输入触发事件代码
Jan 28 #Javascript
用jquery等比例控制图片宽高的具体实现
Jan 28 #Javascript
jQuery实现当按下回车键时绑定点击事件
Jan 28 #Javascript
用js正确判断用户名cookie是否存在的方法
Jan 28 #Javascript
原生javascript实现无间缝滚动示例
Jan 28 #Javascript
You might like
PHP+MySQL删除操作实例
2015/01/21 PHP
3种php生成唯一id的方法
2015/11/23 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
python操作MySQL数据库具体方法
2013/10/28 Python
Python重新引入被覆盖的自带function
2014/07/16 Python
python实现2048小游戏
2015/03/30 Python
获取python文件扩展名和文件名方法
2018/02/02 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
Python和Sublime整合过程图示
2019/12/25 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
十八届三中全会学习方案
2014/02/16 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
爱耳日活动总结
2014/04/30 职场文书
老人节主持词
2015/07/04 职场文书
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技