【javascript】正则表达式match、exec和test的使用

正则表达式match、exec和test的使用

match和exec在匹配成功时返回的都是数组,在没有匹配上时返回的都是null;test在匹配成功是返回true,在没有匹配时返回的是false。match是String的方法,而test和exec是RegExp的方法。本文探讨的是全局匹配与分组匹配的问题,并有源码附着。

一、全局匹配

1.正则表达式可以使用RegExp对象定义,也可以使用常量表达式定义。

var regexp=new RegExp(/\w+/gi);
或者
var regexp=/w+/gi;

2.(1)当不使用全局变量的时候,match与exec的方法是一样的,每次都是对需要匹配的字符串进行第一次匹配。

1    var re = new RegExp(/([a-z]+)=(\d+)/i);
2    var str = "cs=2013 kd=2015";
3    document.write("exec:"+re.exec(str)+"<br />");
4    document.write("match:"+str.match(re)+"<br />");
5    document.write("test:"+re.test(str)+"<br />");
6    document.write("<br /><br />");
7    document.write("exec:"+re.exec(str)+"<br />");
8    document.write("match:"+str.match(re)+"<br />");
9    document.write("test:"+re.test(str)+"<br />"); 

结果输出:

(2)当使用全局变量的时候,exec与match不一样。exec每次执行都是从上一次执行结束之后的位置继续执行所以不一样,而match每次执行的结果都是一样的。

1    var re = new RegExp(/([a-z]+)=(\d+)/gi);
2    var str = "cs=2013 kd=2015";
3    document.write("exec:"+re.exec(str)+"<br />");
4    document.write("match:"+str.match(re)+"<br />");
5    document.write("test:"+re.test(str)+"<br />");
6    document.write("<br /><br />");
7    document.write("exec:"+re.exec(str)+"<br />");
8    document.write("match:"+str.match(re)+"<br />");
9    document.write("test:"+re.test(str)+"<br />"); 

结果输出:

二、分组

无全局匹配分组时,match和exec返回结果相同。由于正则表达式采用了括号分组,所以在返回匹配结果的同时,依次返回该结果的所有分组。exec得到的结果与match得到的结果不一样,match将所有匹配到的结果一次性存入数组当中返回,而exec按照顺序进行匹配,所以需要使用while循环进行一次输出。对exec返回结果进行数组下标访问的结果是每一个完整匹配都会返回一个数组,依次为该匹配到的 [完整序列,子序列1,子序列2,。。。,子序列n],所有exec[0]是完整序列,只有的全都是括号内的()子序列。在此样例中,exec比match效果更为好,在于可以exec对等号两边直接划分,即:exec[1]=exec[2],可以直接访问到。而match更为麻烦些,可以通过match[0].split("=")将两个序列分开,而match[0][0]只是拥有一个字母,并不是实际当中的语义块。

 1 var str = "?id=21&rid=4&page=5";
 2 var regexp=/([a-z]+)=(\d+)/ig;
 3 var match = str.match(regexp);
 4
 5 for(var k=0;k<match.length;k++){
 6     document.write(match[k]+"<br/>");
 7 }
 8 document.write("<br /><br /><br /><br />");
 9
10 var i=1;
11 while(exec= regexp.exec(str)){
12     document.write("第"+i+"次:"+exec+":"+exec[0]+"---->"+exec[1]+"<br/>");
13     i++;
14 } 

结果如图:

时间: 2024-10-05 18:33:24

【javascript】正则表达式match、exec和test的使用的相关文章

Java学习总计(二十六)——JavaScript正则表达式,Js表单验证,原生js+css页面时钟

一.JavaScript正则表达式1.exec检索字符串中指定的值,返回找到的值,并确定其位置2.test检索字符串中指定的值,返回true或false3.正则表达式对象的创建:(1)方式一:Var rgex=new RegExp("[0-9]","模式");(2)方式二:简便写法,用双斜杠//把正则表达式的内容括起来例1(正则创建,使用test()方法): <!DOCTYPE html> <html> <head> <me

javascript正则表达式对象方法 compile() exec() test()的比较

compile() 方法用于在脚本执行过程中编译正则表达式,也可用于改变和重新编译正则表达式. exec() 方法用于检索字符串中的正则表达式的匹配.找到则返回一个数组,未找到则返回null. test() 方法用于检测一个字符串是否匹配某个模式.返回true 或 false. 语法: compile(): RegExpObject.compile(regexp,modifier) regexp 正则表达式. modifier 规定匹配的类型."g" 用于全局匹配,"i&qu

js 正则表达式 test match exec三个方法的异同

方法 match exec test 调用方法 str.match(reg) reg.exec(str) reg.test(str) 说明 如果正则式为全局匹配,则返回所有匹配的字符串,但是当有子表达式时,不匹配子表达式,只执行全局匹配 如果正则式为全局匹配,只返回存在的第一个匹配结果,但是当有子表达式时,返回值不仅有全局匹配,还匹配子表达式 在使用 "g" 参数时,exec() 的工作原理如下: 找到第一个 "e",并存储其位置 如果再次运行 exec(),则从存

javascript 正则表达式补充

定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%>','g'); 2. 字面量 var reg=/<%[^%>]%>/g; g: global,全文搜索,默认搜索到第一个结果接停止 i: ingore case,忽略大小写,默认大小写敏感 m: multiple lines,多行搜索 元字符 正则表达式让人望而却步以一个重要原因就是其转

web前端之JavaScript正则表达式

web前端之JavaScript正则表达式 后面有代码: \d 表示数字 \d? ?表示0个或者一个 \d+ +表示一个或者多个 \d{3} 表示三个 \d{3,5} 表示三到五个 \d{3,} 表示至少出现3次 \d* *表示0到任意个 \b 表示单词边界 \B 表示非单词边界 \bis\b 表示查找" is "的 . 表示任意字符 \ 表示转译 http:(\/\/.+\.jpg) 用()进行分组 $1 获取其内部东西 []表示或 ^表示开头 $表示结尾 g表示全局 \d{4}[/

javascript正则表达式简介

javascript正则表达式 javascript正则表达式 regular expression是一个描述字符模式的对象: ECMAScript中的RegExp类表示正则表达式: String和RegExp都定义了使用正则表达式进行强大的模式匹配.文本检索和替换的函数: 正则表达式主要用来验证客户端的输入数据: Ⅰ.创建正则表达式 类似于创建字符串,可以使用new运算符也可以采用字面值: 参数 含义 g 全局匹配 i 忽略大小写 m 多行匹配 下文中的javascript代码是通过 Ecli

JS中正则匹配的三个方法match exec test的用法

javascript中正则匹配有3个方法,match,exec,test: match是字符串的一个方法,接收一个RegExp对象做为参数: match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配. 该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置. exer 和test是RegExp对象的方法,接收一个字符串参数. 1. 如果你只是想判断字符串是否匹配某个正则表达式,就用test方法: 2.如果想一次性取出所有匹配到

理清JavaScript正则表达式

理清JavaScript正则表达式--下篇 紧接:"理清JavaScript正则表达式--上篇". 正则在String类中的应用 类String支持四种利用正则表达式的方法.分别是search.replace.match和split方法.下面将一一讲述. --String.search(regexp)-- search相对于其他三个方法,是应用正则最简单的方法啦,作用就是根据参数regexp查找相应匹配模式. 具体如下: 方法search中的参数为正则表达式对象,倘若我们赋予的值不是正

JavaScript 正则表达式学习

一直想学习正则表达式,学习完之后想总结一下,发现我学习的很片面,总结的也只是部分,网上前辈总结的很多,也很全面,这里就记录一下我的学习记录吧,以便后面再学习,如有错误,请指正. 下面将直接贴出代码: <script type="text/javascript"> $(function(){ // ***************************************************************************************//