`

js 正则 连续匹配及g属性和lastIndex属性

阅读更多
在firefox中运行如下代码会出现不是你期望的结果。

var str = 'A_A_EA_A_A_A_A_EA_A_A_AE_A_A_A_A_A_A_A_A_A_A_';
function getindex(c, str){
    if(!str){
	return [];
    }
    var arry = str.split('_'),
        reg = new RegExp(c,'ig'),
        length = arry.length,
        result = [],
        i = 0;
    
    while(i<length){
        //reg.lastIndex=0;
        if(reg.test(arry[i])){
            result.push(i);
        }
        i++;
    }
    return result;
}
console.log(getindex('A', str));


O(∩_∩)O哈哈~
问题是使用正则的test方法而且带有g属性进行连续匹配的时候, 如果每次匹配之前 lastIndex属性没有清零,可能会出现问题。

不知道是不是只有js语言有这个问题?其他语言还有待测试...

补充, 进一步理解 lastIndex 属性

var str = "The rain in Spain stays mainly in the plain";
var patt1 = new RegExp("ain", "g");

patt1.test(str);
patt1.test(str);
patt1.test(str);
patt1.test(str);
patt1.test(str);
patt1.test(str);

console.log("Match found. index now at: " + patt1.lastIndex);


开始先运行第一个test,其他的都注释掉
第二次运行两个test,其他的都注释掉,依次类推,查看结果

引用
http://www.w3school.com.cn/js/jsref_lastindex_regexp.asp
分享到:
评论

相关推荐

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

    RegExp对象是JavaScript中用于处理正则表达式的关键内置对象,它包含几个重要的属性:`source`、`global`、`ignoreCase`、`multiline`和`lastIndex`。其中`lastIndex`属性具有可读可写的特点,并且只在正则表达式中...

    js正则表达式之RegExp对象属性lastIndex,lastMatch,lastParen,lastContext,rightContext属性讲解

    1.lastIndex属性,返回匹配内容的最后一个索引位置,也就是下一个匹配的开始位置,注意字符串索引从0开始 代码: [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 2.lastMatch($&)属性,只读属性,如果没有匹配...

    精通 JS正则表达式

    精通JS正则表达式的知识点详解 ...总之,精通JavaScript正则表达式不仅能够提高字符串处理的能力,还能让代码更加高效和优雅。通过对正则表达式的学习和实践,开发者可以轻松地解决各种字符串操作问题,提升编程效率。

    JS正则表达式大全【5】.txt

    ### JavaScript正则表达式构造函数 JavaScript提供了`RegExp`构造函数来创建正则表达式对象。这个构造函数可以接受一个模式字符串和可选的标志符参数。例如: ```javascript var pattern = /ab*/; ``` 或者通过...

    javascript正则表达式学习笔记

    这篇学习笔记将深入探讨JavaScript正则表达式的概念、语法和实际应用。 一、正则表达式基础 1. 创建正则表达式: - 字面量表示法:`/pattern/flags` - 构造函数:`new RegExp('pattern', 'flags')` 2. 常见的...

    JS正则表达式大全【5】

    在本文中,我们将深入探讨JavaScript正则表达式的一些关键概念和方法,以帮助你更好地理解和运用它们。 1. **$_属性**:这个属性并不属于正则表达式对象,而是全局变量,它保存了上一次匹配操作的完整匹配结果。...

    JavaScript正则表达式.rar

    JavaScript正则表达式是编程语言JavaScript中的一个重要组成部分,它用于处理文本字符串,执行模式匹配和字符串操作。在JavaScript中,正则表达式是一种强大的工具,能够帮助开发者进行复杂的文本搜索、替换和分割...

    JS正则表达式中文教程

    正则表达式对象提供了多种方法和属性,用于执行各种匹配操作: 1. **方法** - `test()`: 检测字符串是否包含匹配项,返回布尔值。 - `exec()`: 在字符串中查找匹配项,返回一个数组或null。 - `compile()`: 编译...

    javascript的正则匹配方法学习

    JavaScript正则匹配方法学习主要包括三个方面的知识点:match方法、exec方法、test方法。 首先,我们来看match方法。match方法是String对象的方法,它可以用于检索字符串,以找到与正则表达式匹配的所有子串。该...

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

    在JavaScript编程语言中,正则表达式是一种强大的文本处理工具,用于执行模式匹配、搜索和替换等功能。本文详细介绍了JavaScript中正则表达式全局匹配模式的使用方法,特别是当添加了“/g”标志时,它能让正则表达式...

    js常用的正则表达式

    在JavaScript中,正则表达式(Regular Expression)是一种强大的文本处理工具,它由一系列字符和特殊符号组成,用于匹配字符串中的特定模式。JavaScript通过提供内置的`RegExp`对象来支持正则表达式的创建与使用。...

    正则表达式全局匹配模式(g修饰符)

    在全局匹配模式下,正则表达式引擎会维护一个名为`lastIndex`的属性。这个属性表示下次匹配开始的位置。如果找到了匹配项,`lastIndex`会被设置为匹配内容的下一个字符的索引。如果没有找到匹配项,`lastIndex`会被...

    javascript,资源之js正则表达式

    - 使用` lastIndex`属性在全局搜索中跟踪上次匹配结束的位置。 - 使用`RegExp.prototype.compile()`(非标准,但某些环境支持)重新编译正则表达式。 - 正则表达式对象的静态方法,如`RegExp.escape()`(非标准,...

    js正则表达式

    正则表达式对象提供了多种方法和属性,帮助我们更好地操作和理解匹配结果: - **`test()`**:测试字符串是否与正则表达式匹配,返回布尔值。 - **`exec()`**:执行匹配查找,返回包含匹配结果的数组。 - **`compile...

Global site tag (gtag.js) - Google Analytics