`
wuyakenihao
  • 浏览: 30974 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

为什么JavaScript中正则表达式的test方法会出错?

阅读更多
一段这样的JavaScript代码,猜猜结果如何?

var i = 0, m = 20, a = [], r = /^\d+$/g;
for(i = 0; i < m; i++){
    a.push('' + i);
}
m = a.length;
for(i = 0; i < m; i++){
    if(r.test(a[i])){
        document.write(a[i] + 'true<br />');
    }
    else{
        document.write(a[i] + 'false<br />');
    }
} 也许你期待的结果应该全是true,可是实际结果呢?true和false交替出现,0是true,1是false,2是true,3是false……是不是很怀疑?其实仔细看一下,那个正则表达式多了个全局选项“g”,去掉就好了。

可是为什么有“g”就会出错呢?

原因其实很简单,当一个模式具有全局选项时,和exec一样,每次test都会保留上次匹配的位置——即lastIndex。很显然,当第一次匹配之后,第二次匹配时的lastIndex已经到了字符串末尾,尽管这个时候字符串已经是一个新的字符串了,但是这个lastIndex的位置并没有重新初始化,所以会从末尾开始匹配——当然会匹配失败了。

解决方案有两种:


去掉正则表达式后面的g;
每次完成匹配之后重置模式的lastIndex属性;


使用重置lastIndex的代码:

var i = 0, m = 20, a = [], r = /^\d+$/g;
for(i = 0; i < m; i++){
    a.push('' + i);
}
m = a.length;
for(i = 0; i < m; i++){
    if(r.test(a[i])){
        document.write(a[i] + 'true<br />');
    }
    else{
        document.write(a[i] + 'false<br />');
    }
    r.lastIndex = 0;
}
分享到:
评论

相关推荐

    【JavaScript源代码】JavaScript中正则表达式的实际应用详解.docx

    ### JavaScript中正则表达式的实际应用详解 在日常开发中,正则表达式作为一种强大的文本处理工具,在JavaScript中被广泛地应用。无论是简单的字符串验证,还是复杂的文本解析,正则表达式都能提供高效的解决方案。...

    JavaScript正则表达式详解及使用方法

    使用场景及目标:帮助读者理解和掌握JavaScript中正则表达式的创建和使用,解决实际开发中常见的字符串匹配和处理问题。 阅读建议:在学习过程中结合具体示例进行实践,注意理解不同方法的区别和应用场景,通过不断...

    js中正则表达式应用

    #### 三、正则表达式在JavaScript中的使用方法 在JavaScript中,可以通过以下两种方式创建正则表达式: 1. **构造函数**: ```javascript var regex = new RegExp('pattern', 'flags'); ``` 2. **字面量**: ...

    调试JavaScript中正则表达式中遇到的问题

    这就是为什么在上面的例子中,`exec()`返回`null`,因为它在找到第一个匹配(即"Match"的首字母 'M')后没有找到其他匹配。 总结一下,调试JavaScript中的正则表达式问题时,要理解`test()`和`exec()`的不同行为: ...

    JavaScript中正则表达式判断匹配规则及常用方法

    ### JavaScript中正则表达式判断匹配规则及常用方法 #### 一、引言 JavaScript作为一种广泛应用于Web开发的脚本语言,其强大的功能之一便是正则表达式的支持。正则表达式提供了一种灵活的方式来匹配、查找以及替换...

    javascript中正则表达式语法详解

    JavaScript为正则表达式提供了多个方法,其中一些常用的方法如下: - `test(str)`:检查字符串`str`是否与正则表达式模式匹配,返回布尔值。 - `exec(str)`:执行一次正则表达式匹配操作,并返回匹配结果数组或`...

    Javascript中正则表达式的全局匹配模式分析

    ### Javascript中正则表达式的全局匹配模式分析 在JavaScript中,正则表达式是一种强大的文本处理工具,它允许开发者通过特定的语法来定义字符串的模式,从而实现复杂的搜索、匹配、替换等操作。当涉及到正则表达式...

    JavaScript-正则表达式.pdf

    以上是JavaScript中正则表达式的基础知识,熟练掌握这些将极大地提升你在处理字符串时的效率和灵活性。实际应用中,正则表达式还可以结合其他JavaScript内置函数和方法,实现更复杂的文本处理任务。

    详解JavaScript编程中正则表达式的使用

    在JavaScript编程中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许我们进行复杂的文本匹配、替换和提取。正则表达式的核心组成部分包括模式(pattern)和修饰符(modifiers),它们共同决定了...

    JavaScript对象之正则表达式共16页.pdf.zip

    在这个压缩包“JavaScript对象之正则表达式共16页.pdf.zip”中,我们可以期待找到关于JavaScript中正则表达式的深入讲解,这包括它们的构造、用法以及在实际编程中的应用。 正则表达式(Regular Expression,简称...

    JavaScript正则表达式小结(test|match|search|replace|split|exec)|angluo-javascript-172930.pdf

    JavaScript中正则表达式是用于匹配字符串中字符组合的模式,它是对字符串执行模式匹配的强大工具。在JavaScript中,正则表达式既是一种数据类型,也是一种创建正则表达式的语法。 JavaScript提供了六种与正则表达式...

    正则表达式的ppt

    正则表达式是一种强大的文本处理工具,用于匹配、查找...这个"正则表达式的ppt"可能包含了JavaScript和Java中正则表达式的基础知识、高级特性以及实例应用,通过学习这些内容,你可以提升对文本处理和数据验证的能力。

    javascript正则表达式和字符串RegExp and String(一).docx

    本文旨在深入探讨 JavaScript 中正则表达式的创建、使用以及相关属性和方法,为读者提供一份详尽的学习指南。 #### 正则表达式的创建方式 正则表达式可以通过两种方式创建: 1. **通过 `/.../` 的方式创建**: -...

    JS中正则表达式要注意lastIndex属性

    在JavaScript中,正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配字符串中的模式。在使用正则表达式时,了解其内置属性是非常重要的,尤其是`lastIndex`属性,它在全局搜索中扮演关键角色。让...

    javascript常用数据校验正则表达式

    下面将详细讨论JavaScript中正则表达式的常见用法以及`validate.js`这个文件可能包含的校验规则。 一、正则表达式基础 1. 创建正则表达式: - 字面量形式:`/pattern/flags` - 构造函数形式:`new RegExp('...

    JS中正则表达式全局匹配模式 /g用法详解

    本文详细介绍了JavaScript中正则表达式全局匹配模式的使用方法,特别是当添加了“/g”标志时,它能让正则表达式在整个目标字符串中进行全局搜索,匹配所有可能的实例。 ### 正则表达式简介 正则表达式(Regular ...

Global site tag (gtag.js) - Google Analytics