`

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正则表达式之RegExp对象属性lastIndex,lastMatch,lastParen,lastContext,rightContext属性讲解

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

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

    这篇文章,主要和大家聊聊JavaScript中RegExp对象的属性。 解释 每个RegExp对象都包含5个属性,source、global、ignoreCase、multiline、lastIndex。 source:是一个只读的字符串,包含正则表达式的文本。 var reg ...

    正则表达式

    JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法. 在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp...

    js正则表达式中exec用法实例

    本文实例讲述了js正则表达式中exec用法。分享给大家供大家参考。具体如下: exec要注意以下几点: 1. exec返回的是一个数组 2. 该数组的属性有input(被匹配的整个字符串) index(匹配到第一个元素的开始位置) 3. ...

    JavaScript正则表达式下之相关方法

    上篇文章给大家介绍了JavaScript 正则表达式上之基本语法介绍了JavaScript正则表达式的语法,有了这些基本知识,可以看看正则表达式在JavaScript的应用了,在一切开始之前,看看RegExp实例的几个属性 RegExp实例...

    解决js相同的正则多次调用test()返回的值却不同的问题

    这是因为正则reg的g属性,设置的全局匹配。RegExp有一个lastIndex属性,来保存索引开始位置。 上面的问题,第一次调用的lastIndex值为0,到了第二次调用,值变成了11。 var reg = /^1[345678][0-9]{9}$/g; console....

    js正则表达式常用函数详解(续)

    正则表达式对象的方法 ...2、lastIndex,返回字符位置,它是被查找字符串中下一次成功匹配的开始位置。 3、input ($_),返回执行规范表述查找的字符串。只读。 4、lastMatch ($&),返回任何正则表达式搜索过程中的最

    浅谈js中test()函数在正则中的使用

    test() 方法用于检测一个字符串是否匹配某个模式. 返回一个 Boolean 值,它指出在被...每个正则表达式都有一个 lastIndex 属性,用于记录上一次匹配结束的位置. var re = /^[1-9]{4,10}$/gi; var str = "123456"; ale

    微软JavaScript手册

    lastIndex 属性 返回在字符串中找到的最后一个成功匹配的字符位置。 lastIndexOf 方法 返回在 String 对象中最后出现子字符串的位置。 lastMatch 属性 ($) 从任何正则表达式搜索中返回最后匹配的字符。 lastParen...

    regular-expressions-cheatsheet:在JavaScript中使用正则表达式的简明速查表

    在JavaScript中使用正则表达式的简明速查表 匹配 分组和捕获 标志 参考资料和工具 注意事项 遵循我的思维模式。 故意不全面。 仅包括语法和我实际使用的API的一部分。 某些概念定义不准确。 (例如,某些定义...

    javascript文档

    lastIndex 属性 返回在字符串中找到的最后一个成功匹配的字符位置。 lastIndexOf 方法 返回在 String 对象中最后出现子字符串的位置。 lastMatch 属性 ($) 从任何正则表达式搜索中返回最后匹配的字符。 lastParen...

    javascript语言参考+教程 CHM

    lastIndex 属性; length 属性 (Array); length 属性 (Function); length 属性 (String); LN10 属性; LN2 属性; LOG10E 属性; LOG2E 属性; MAX_VALUE 属性; message 属性; MIN_VALUE 属性; multiline 属性...

    js-lexer:基于流式正则表达式的词法分析器

    当前索引,则将 lastIndex 设置为索引并再次执行正则表达式。 如果 match index === 当前索引,我们就有了一个匹配。 按索引对匹配项进行排序,以便我们可以更好地找到它们-&gt; 需要保留规则顺序,因此规则数量很少...

    JScript 语言参考

    lastIndex 属性 返回在字符串中找到的最后一个成功匹配的字符位置。 lastIndexOf 方法 返回在 String 对象中最后出现子字符串的位置。 lastMatch 属性 ($) 从任何正则表达式搜索中返回最后匹配的字符。 lastParen...

    javascript使用正则获取url上的某个参数

    function GetUrlMenuCode() { ...var reg = /MenuCode=/g; var menuCode = ""; for (var i = 0; i &lt; parameter.length; i++) { reg.lastIndex = 0; if (reg.test(parameter[i])) { menuCode = param

Global site tag (gtag.js) - Google Analytics