正则表达式是一个强大的东西,以前一直对这里比较模糊,这里写下理解。
RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。下面是两种创建方式
var patt =/pattern/attributes
参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用
于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,
不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该
参数。
var patt =new RegExp(pattern, attributes);
至于那些有多少元字符、负向类、范围类、组合类、预定义类、量词什么的这里就不说了。javascript中有这些,java中也有这些,linux中也会用到这些,其实eclipse中查找搜索也会用到,这里这些还是比较重要的。网上一搜也是很多。这里提供一个链接,是w3c官网的。
http://www.w3school.com.cn/js/jsref_obj_regexp.asp
进入整体exec和match方法
一:exec
exec方法
返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比
test() 方法以及支持正则表达式的 String 对象的方法更为复杂。
如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。
此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与
RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元
素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以
此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。
index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被
检索的字符串 string。我们可以看得出,在调用非全局的 RegExp 对象的
exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同
的。
但是,当RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复
杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字
符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将
把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一
个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有
匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把
lastIndex 属性重置为 0。
二:match方法
如果 match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp
对象的属性以反映匹配结果。
match
方法返回的数组有三个属性:input、index和lastIndex。Input
属性包含整个的被查找字符串。Index 属性包含了在整个被查找字符串中匹配的子字符串的位置。LastIndex
属性包含了最后一次匹配中最后一个字符的下一个位置。
如果没有设置全局标志 (g),数组的0元素包含整个匹配,而第 1 到 n 元素包含了匹配中曾出现过的任一个子匹配。这相当于没有设置全局标志的
exec 方法。如果设置了全局标志,元素0到n中包含所有匹配。
列举实例:
var str = "a2a2bb1b1c3c3afasfasjlajfklas";
var p = /(\w)(\d)\1\2/g;
var result;
console.log(p.lastIndex);
while ((result = p.exec(str)) != null) {
console.log(result);
console.log(p.lastIndex);
}
得到结果为:
0
1:["a2a2", "a", "2"] //这个数组的index为0 ,input属性都是str,下面的也是一样
4
2:
["b1b1", "b", "1"] //这个数组的index为4
9
3:
["c3c3", "c", "3"] //这个数组的index为9
13
可以看出这个是一个全局的正在表达式,开始lastIndex为0,即从开始查找,这个都很容易理解。第一次循环找到一个,这时候把lastIndex设为4,第二个“2”的下一个位置为4,循环三次后再也没找到匹配的则lastIndex为0。这样就都很容易理解了。这样得到了所有匹配的完成信息。其中第一个数组"a"为方向引用\1也就是\w匹配的,"2"为第二个反向引用\2也就是\d匹配的。后面的都是一样的理解。
有时候我们不需要这些方向引用的,只想知道匹配的那些字符。那我们就可以这样,一句搞定。str.match(p)就可以得到
["a2a2", "b1b1", "c3c3"]
理解如果正在表达式不是全局的这是exec和match得到结果其实是一样的。例如:
var str = "a2a2bb1b1c3c3afasfasjlajfklas";
var p = /(\w)(\d)\1\2/;
var result;
console.log(str.match(p));
console.log(p.exec(str))
得到结果是上面红色为1的数组。
理解test、exec和match方法都会改变RegExp对象的属性执行这些,如果反向应用都有,那RegExp的$!......到$9都会有值的,最简单的RegExp的index会改变。测试时发现就IE下RegExp有的属性FireFox和Ghrome下不一定有,并且就IE最特别了。像RegExp下的index和lastIndex都有,但是Firefox和Ghrome就没有。
讲一下方向引用,先看看下面的例子:
var str = "1234 5678";
var patt = /(\d{4}) (\d{4})/;
var newStr = str.replace(patt,"$2 $1");
console.log(newStr);
得到结果:
5678 1234
结合上面的例子。其实反向引用是正则表达式中有()分组的情况下,像(A?(B?(C?)))这样的正则表达式就有三组,则会有三个反向引用。
1:(A?(B?(C?)))
2:(B?(C?))
3:(C?)
分享到:
相关推荐
JavaScript为开发者提供了String对象和RegExp对象来处理字符串匹配,其中String对象的match方法和RegExp对象的exec方法是实现正则表达式匹配的主要方式。两者在功能上有相似之处,也有明显的差异,以下详细说明。 ...
在JavaScript中,String.match() 方法是一个非常重要的方法,用于在字符串中执行查找匹配的字符串,并返回匹配结果。该方法是JS入门学习中的基础知识,适用于所有想深入学习JavaScript的开发者。 String.match() ...
正则表达式在JavaScript中是非常强大的工具,通过灵活运用不同的创建方式和方法,可以帮助开发者高效地处理字符串数据。理解和掌握正则表达式的各种特性和方法对于编写高效、健壮的应用程序至关重要。
实例中展示了如何使用RegExp对象的`exec()`方法在字符串中执行匹配。`exec()`方法会返回一个数组,包含匹配的结果,如果没有找到匹配项则返回`null`。例如,`var pattern=/a/; document.write(pattern.exec("asdas")...
RegExp 对象的方法包括 exec()、test()、search()、match()、replace() 和 split() 等。 exec() 方法用于检索字符串中的正则表达式的匹配。语法为 RegExpObject.exec(string),其中 string 是要检索的字符串。...
另外,对于全局匹配,可以考虑使用其他字符串处理方法替代,如String.prototype.matchAll方法(在支持的浏览器中可用)。 最后,文档中还提到了一些关于处理遗留HTML页面以及AJAX返回HTML格式数据的挑战。理想情况...
在JavaScript中,`match()`和`exec()`是处理正则表达式匹配的两个关键方法,它们主要用于在字符串中查找匹配特定模式的结果。虽然这两个方法在功能上有些相似,但它们的使用方式和返回值有所不同。 1. **match()**...
正则表达式中的test、exec和match方法是经常被使用的方法,它们各自有着不同的功能和用途,以下是对这三个方法区别的详细介绍。 首先,test方法主要用于检查一个字符串是否符合某个模式,并返回一个布尔值结果。...
对象在JavaScript中是一种复合数据类型,提供了多种操作属性和方法。 1. **delete操作符**:用于删除对象的属性。`delete object.property`可以从对象中移除一个属性。 2. **Object.keys()**:返回一个包含对象...
javascript中正则匹配有3个方法,match,exec,test。这些方法都跟字符串和RegExp对象有关,但使用场景不一样,容易混淆。match是字符串的一个方法,接收一个RegExp对象做为参数,其他的是RegExp对象的方法,接收一个...
- match(regexp):返回字符串中匹配正则表达式的结果,如果不带g(全局搜索标志),则返回的结果和regexp.exec(string)相同。 - slice(start, end):返回字符串的一个片段或子字符串,end参数是结束位置的索引+1。...
本指南将详细介绍如何在JavaScript中使用正则表达式,包括创建正则表达式的方法、常用的正则表达式方法以及一些实用的示例。 #### 二、创建正则表达式 在JavaScript中,可以通过两种方式创建正则表达式: 1. **使用...
不必遍历RegExp#exec ,不可变的并且具有更好的结果格式。 安装 $ npm install execall 用法 import execAll from 'execall' ; execAll ( / ( \d + ) / g , '$200 and $400' ) ; /* [ { match: '200', ...
在JavaScript中,RegExp对象用于表示正则表达式,它有自己的构造函数和一系列用于匹配、捕获、替换字符串的方法,如test、exec、match、replace等。 为了深入理解正则表达式,通常需要学习正则表达式的元字符、量词...
6. **正则表达式RegExp**: `RegExp`对象用于处理正则表达式,`exec`和`test`用于匹配字符串,`match`、`search`和`split`在字符串操作中广泛应用正则表达式。 7. **对象操作Object**: `Object`对象提供了`keys`、`...
在JavaScript中,正则表达式(Regular Expression)是一种...总之,`exec()`是JavaScript中处理正则表达式的关键方法,尤其在需要逐个查找全局匹配的情况下。理解其工作原理和用法对于编写高效的文本处理代码至关重要。