每个RegExp对象的实例具有lastIndex属性,它是被查找字符串中下一次成功匹配的开始位置(犀牛书上的解释"上次匹配后的位置,用于在一个字符串中进行多次匹配"),默认值是0。 lastIndex 属性被 RegExp 对象的 exec 和 test 方法修改.并且它是可写的.lastIndex的值等于成功匹配的子串的最后一个字符在整个字符串中的索引加1。
var re = /[A-Z]/; //此时一直从字符串开始位置匹配
var str = "Hello,World!!!";
alert(re.lastIndex);//0
var arr = re.exec(str); //exec方法执行后,修改了re的lastIndex属性
alert(re.lastIndex);//1
arr = re.exec(str);
alert(re.lastIndex);//1
arr = re.exec(str);
alert(re.lastIndex);//1
re = /[A-Z]/g; //全文匹配,此时是一个循环过程。
alert(re.lastIndex);//0
arr = re.exec(str);
alert(re.lastIndex);//1
arr = re.exec(str);
alert(re.lastIndex);//7
arr = re.exec(str);
alert(re.lastIndex);//0
arr = re.exec(str);
alert(re.lastIndex);//1
当匹配失败(后面没有匹配),再执行exec等方法会将lastIndex设为0(开始位置)
var re = /\d/; //var re = /\d/g;效果一样
var str = "Hello,World!!!";
alert(re.lastIndex);//0
var arr = re.exec(str);
alert(re.lastIndex);//0
当设置了lastIndex的值时:
(1)如果指定了全文匹配g,在执行exec等方法则从指定的lastIndex位置开始匹配,如果匹配失败则lastIndex=0,如果在执行exec等方法时则从0开始匹配,如果没有匹配成功则lastIndex=0,则说明没有字符串没有一个正确匹配,如果匹配成功则lastIndex等于匹配字符最后一个字符索引加1。如果一直执行exec等方法它是一个循环的过程。
(2)如果没有指定全文匹配g,在每次执行exec等方法时都是从字符串开始位置(即lastIndex=0的位置)开始匹配,如果匹配失败则lastIndex=0,匹配成功则lastIndex等于匹配字符最后一个字符索引加1。
var re = /[A-Z]/;
var str = "Hello,World!!!";
alert(re.lastIndex);//0
re.lastIndex=2;
alert(re.lastIndex);//2
var arr = re.exec(str);
alert(re.lastIndex);//1
arr = re.exec(str);
alert(re.lastIndex);//1
arr = re.exec(str);
alert(re.lastIndex);//1
var re = /[A-Z]/g; //全文匹配
var str = "Hello,World!!!";
alert(re.lastIndex);//0
re.lastIndex=2;
alert(re.lastIndex);//2
var arr = re.exec(str);
alert(re.lastIndex);//7
arr = re.exec(str);
alert(re.lastIndex);//0
arr = re.exec(str);
alert(re.lastIndex);//1
arr = re.exec(str);
alert(re.lastIndex);//7
总结:在执行exec等方法时如果匹配失败lastIndex=0。如果有没有全文匹配标志g,则无论匹配多少次,lastIndex都相等,如果有全文匹配标志g,则lastIndex等于匹配子串最后一个字符在整个字符串的索引加1,依次进行,知道没有匹配为0,进入下一次循环。
分享到:
相关推荐
正则表达式及其对象属性在文本处理、数据验证和许多其他场景中发挥着关键作用,特别是在JavaScript等脚本语言中,正则表达式为开发者提供了一种灵活的字符串匹配机制,极大地提高了编程的效率与能力。通过理解并利用...
最后,为了更好地理解RegExp对象的工作方式,可以参考提供的代码示例,其中展示了如何创建RegExp实例以及如何使用其属性来确定是否找到了指定的模式。通过这些示例和详细解释,我们能够更加深入地掌握JavaScript中...
- 除了实例属性外,RegExp对象还有一组静态属性,这些属性被所有的RegExp实例共享。例如`RegExp.lastMatch`、`RegExp.leftContext`等。 ### 转义字符的处理 由于JavaScript字符串中的反斜杠`\`是一个转义字符,...
实例中展示了如何使用RegExp对象的`exec()`方法在字符串中执行匹配。`exec()`方法会返回一个数组,包含匹配的结果,如果没有找到匹配项则返回`null`。例如,`var pattern=/a/; document.write(pattern.exec("asdas")...
RegExp对象的实例属性包括: - global:布尔值,表示是否设置了g标志。 - ignoreCase:布尔值,表示是否设置了i标志。 - multiline:布尔值,表示是否设置了m标志。 - source:正则表达式的文本。 - lastIndex:用于...
正则表达式检查当分配了全局('g')标志时,在分配的RegExp对象上test方法的可能会表现异常,这是因为在后续读取时将lastIndex属性提前: const testPattern = / test / g ;testPattern . test ( 'testing' ) ; // ...
* 如果 exec 方法找到匹配,则它返回一个数组,并更新全局 RegExp 对象的属性,以反映匹配结果。 * 如果设置了全局标志,exec 方法从 lastIndex 的值指示的位置开头查找。 exec 函数是一种非常有用的方法,用于在...
在现代JavaScript开发中,为了确保跨浏览器的一致性,建议在使用exec方法时,不要依赖于lastIndex属性,或者在IE环境下针对正则表达式创建新的RegExp实例以避免潜在的lastIndex问题。另外,对于全局匹配,可以考虑...
在深入探讨正则表达式字面量在...不仅每个字面量都保证创建新的RegExp实例,而且在错误处理和语法灵活性方面也有所提升。这些更新符合现代JavaScript开发者的需求,对于处理复杂的文本处理和验证任务尤为重要。
RegExp实例对象有五个属性 1.global:是否全局搜索,默认是false 2.ignoreCase:是否大小写敏感,默认是false 3.multiline:多行搜索,默认值是false 4.lastIndex:是当前表达式模式首次匹配内容中最后一个字符的下...
RegExp对象的方法如`exec()`用于在字符串中执行匹配,`test(subject)`检测字符串是否匹配,以及`source`、`global`、`ignoreCase`、`multiline`和`lastIndex`属性获取正则表达式的特征。 Function对象是JavaScript...
2. RegExp实例属性 RegExp对象有一些重要属性,包括: - `global`:一个布尔值,指示是否设置了"g"标志。 - `ignoreCase`:一个布尔值,指示是否设置了"i"标志。 - `multiline`:一个布尔值,指示是否设置了"m"标志...
本文将介绍JavaScript中使用RegExp对象进行正则匹配的方法,并通过实例分享相关使用技巧。 首先,RegExp对象的构造函数可以创建一个正则表达式对象。构造函数有两种形式:一种是使用new关键字和RegExp构造函数,另...
4. **其他属性**:`RegExp.lastIndex`, `RegExp.lastParen`, `RegExp.lastMatch`, `RegExp.leftContext`, `RegExp.rightContext`等用于获取更多匹配细节。 #### 总结 通过以上分析,我们可以看到JavaScript正则...
JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法. 在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp...
2. **实例属性**:`RegExp`对象有一些实例属性,例如`source`属性返回正则表达式的源文本,`lastIndex`属性用于记录上一次匹配的位置,对于全局搜索特别有用。 3. **静态属性**:`RegExp`对象还有一系列静态属性,...