js正则表达exec与match的区别说明

 本篇文章主要是对js正则表达exec与match的区别进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助

以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用。
 
最近开发遇到一些需要使用正则表达式,顺便研究一下
 
正则表达式对象有两个定义方式:: 
 
1、第一种定义:
 
new RegExp(pattern, attributes);如var reg = new RegExp("abc","g") 
 
其中pattern为表示表达式内容,如上表示匹配abc
 
attributes:g,全局匹配,i不区分大小写,m执行多行匹配,用最多的为g和i
 
2、第二种定义:/pattern/attributes. 
 
如:var reg = /abc/g;
 
正则表达的规则一些规则在此不再说明,只记录exec和match的区别:
 
1、exec是正则表达式的方法,而不是字符串的方法,它的参数才是字符串,如下所示:
 
如上定义 
var reg = new RegExp("abc") ; 
var str = "3abc4,5abc6";
reg.exec(str );  
 
2、match是字符串执行匹配正则表达式规则的方法,他的参数是正则表达,如
 
var reg = new RegExp("abc") ; 
var str = "3abc4,5abc6";
str.match(reg);
 
3、exec和match返回的都是数组;
 
如果exec执行的正则表达式没有子表达式(小括号内的内容,如/abc(s*)/中的(s*) ),如果有匹配,就返回第一个匹配的字符串内容,此时的数组仅有一个元素,如果没有匹配返回null;
 
var reg = new RegExp("abc") ; 
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));
 
执行如上代码,你会发现两者内容均为一样:abc,
 
4、如果定义正则表达对象为全局匹配如:
 
var reg = new RegExp("abc","g") ; 
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg)); 
 
则 为abc和abc,abc;因为match执行了全局匹配查询;而exec如果没有子表达式只会找到一个匹配的即返回。
 
5、当表示中含有子表达式的情况:
 
var reg = new RegExp("a(bc)") ; 
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));
 
你会发现两者执行的结果都是:abc,bc; 
 
6、当如果正则表达式对象定义为为全局匹配
 
var reg = new RegExp("a(bc)","g") ; 
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));
 
则两者返回的结果是abc,bc和abc,abc,
 
总结为:
 
1、当正则表达式无子表达式,并且定义为非全局匹配时,exec和match执行的结果是一样,均返回第一个匹配的字符串内容;
 
2、当正则表达式无子表达式,并且定义为全局匹配时,exec和match执行,做存在多处匹配内容,则match返回的是多个元素数组;
 
3、当正则表达式有子表示时,并且定义为非全局匹配,exec和match执行的结果是一样如上边的第5种情况;
 
4、当正则表达式有子表示时,并且定义为全局匹配,exec和match执行的结果不一样,此时match将忽略子表达式,只查找全匹配正则表达式并返回所有内容,如上第6种情况;
 
也就说,exec与全局是否定义无关系,而match则于全局相关联,当定义为非全局,两者执行结果相同
 

时间: 2024-09-16 02:46:04

js正则表达exec与match的区别说明的相关文章

js正则表达exec与match的区别说明_javascript技巧

以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用. 最近开发遇到一些需要使用正则表达式,顺便研究一下 正则表达式对象有两个定义方式:: 1.第一种定义: new RegExp(pattern, attributes);如var reg = new RegExp("abc","g") 其中pattern为表示表达式内容,如上表示匹配abc attributes:g,全局匹配,i不区分大小写,m执行多行匹配,

正则表达式中test、exec、match的区别介绍及括号的用法

test.exec.match的简单区别 1.test test 返回 Boolean,查找对应的字符串中是否存在模式. var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.test(str)); // true 2.exec exec 查找并返回当前的匹配结果,并以数组的形式返回. var str = "1a1b1c"; var reg = new Re

JS 正则去除'//'和'/* */'注释

var reg = /("([^"]*(.)?)*")|('([^']*(.)?)*')|(/{2,}.*?(r|n))|(/*(n|.)*?*/)/g, // 正则表达式 str = $('event').html(); // 欲处理的文本 console.log(str); // 打印出:原文本 console.log(str.match(reg));// 打印出:匹配子串 str.replace(reg, function(word) { // 去除注释后的文本 ret

JS正则中的match与exec使用说明_正则表达式

主要参考W3C教程 String.match()<?XML:NAMESPACE PREFIX = O /> match() 方法将检索目标字符串,以找到一个或多个与 正则表达式regexp 匹配的文本.match()有两种情况: <!--[if !supportLists]-->1. <!--[endif]-->如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到目标字符串中的所有匹配子字符串. 匹配情况 返回值 没有找到任何匹配的子串 nul

JS正则中的match与exec使用说明

主要参考W3C教程 String.match() match() 方法将检索目标字符串,以找到一个或多个与 正则表达式regexp 匹配的文本.match()有两种情况: <!--[if !supportLists]-->1. <!--[endif]-->如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到目标字符串中的所有匹配子字符串. 匹配情况 返回值 没有找到任何匹配的子串 null 找到了一个或多个匹配子串 一个数组.数组的内容包含所有的匹配子串

这个js的正则表达为什么搞不动用innerHTML得到字符串?

问题描述 各位大侠,帮忙看下这个js的正则表达为什么搞不动用innerHTML得到字符串?用var tStr = "https:2222";都可以搞,用innerHTML得到字符串就搞不动,这是为神码?<html><head><script language="javascript" type="text/javascript" src="demo.js" >https:1111 https

js 除去字符串中的重复字符的正则表达

  <html> <head> <title>利用正则表达法除去字符串中的重复字符</title> </head> <body> <script language="网页特效"> str = "google" str1 = str.replace(/(.).*/g,"$1") document.write(str + "<br>")

JS正则表达式一条龙讲解(从原理和语法到JS正则)

正则啊,就像一座灯塔,当你在字符串的海洋不知所措的时候,总能给你一点思路:正则啊,就像一台验钞机,在你不知道用户提交的钞票真假的时候,总能帮你一眼识别:正则啊,就像一个手电筒,在你需要找什么玩意的时候,总能帮你get你要的东西... -- 节选自 Stinson 同学的语文排比句练习<正则> 欣赏了一段文学节选后,我们正式来梳理一遍JS中的正则,本文的首要目的是,防止我经常忘记正则的一些用法,故梳理和写下来加强熟练度和用作参考,次要目的是与君共勉,如有纰漏,请不吝赐教,良辰谢过. 本文既然取题

详解JS正则replace的使用方法_javascript技巧

在讲replace的高级应用之前,我们先简单梳理一下JS正则中的几个重要的知识点,以帮助你对基础知识的回顾,然后再讲解JS正则表达式在replace中的使用,以及常见的几个经典案例.  一.正则表达式的创建 JS正则的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\s+)|(\s+$)","g"); //使用直接字面量创建 var regStr = /(^\s+)|(