有没有办法检索'索引' RegExp搜索而不是' lastIndex'?

时间:2015-02-27 05:05:10

标签: javascript regex

Ok peeps ..所以我有一个包含表元素outerHTML的字符串变量。这不是我的方便工作,它是凌乱的,到处都是白色空间,不必要的换行符等......

我打算尝试将一些js写入 xify 或“整理”代码,列出行,删除空格等,当我决定最后拿一个雄鹅 RegExp 在搜索字符串时的工作方式......

我正在理解 RegExp .lastIndex属性如何工作,并且作为视觉学习的一部分,我想在控制台中显示我在彩色样式圆形中搜索的字符串搜索结果位置的表达式......

这就是我的问题所在。如果我想包含用%c搜索的表达式来设置它的样式,我需要表达式的起始和结束索引(lastIndex)......

现在我可以处理这个,如果表达式是/hello/之类的单词,我只需减去.source属性的长度。但是,如果表达式是/\w/,则表示任何单词都是什么。

问。我如何找到单词开头的索引?

以下是我想要实现的 示例 。目前,通话str.src(exp_3)不会执行任何操作,但是下方的console.warn()会显示我希望通过该通话获得的结果。

Object.defineProperty(String.prototype,'src',{value:function(e){
    src = e.source;
    if(src[0] != '\\')          len = src.length;
        else if(src == '\\s')   len = 1;
            else                len = 0;
    aEd  = [];
    aSty = [];
    prev = 0;
    while( e.test(this) ){
        f = e.lastIndex;
        s = f-len;
        if(s)   aEd.push( this.slice(prev, s) );
        aEd.push('%c', this.slice(s,f), '%c');
        aSty.push('background:teal;color:silver', '');
        prev = f;
    }
    aEd.push( this.slice(f,this.length) );
    sEd = aEd.join('');
    sx  = '"'+ sEd +'","'+ aSty.join('","') +'"';
    eval('console.log('+sx+')');
}});

$(document).ready(function(){
    str   = 'Is this all this is?';
    exp_1 = /is/gi;
    exp_2 = /\s/g;
    exp_3 = /\w/g;

    str.src(exp_1);
    str.src(exp_2);
    str.src(exp_3);

    console.warn(
        '%cIs%c %cthis%c %call%c %cthis%c %cis?%c',
        'background:teal;color:silver','',
        'background:teal;color:silver','',
        'background:teal;color:silver','',
        'background:teal;color:silver','',
        'background:teal;color:silver',''
    );
});

请善待,我确实说我 学习 ......

1 个答案:

答案 0 :(得分:0)

你真的很接近解决方案。

Object.defineProperty(String.prototype,'src',{value:function(e){
    src = e.source;
    aEd  = [];
    aSty = [];
    prev = 0;

    while( match = e.exec(this)){
        f = e.lastIndex;
        s = match.index;
        if(s)   aEd.push( this.slice(prev, s) );
        aEd.push('%c', this.slice(s,f), '%c');
        aSty.push('background:teal;color:silver', '');
        prev = f;
    }
    aEd.push( this.slice(f,this.length) );
    sEd = aEd.join('');
    sx  = '"'+ sEd +'","'+ aSty.join('","') +'"';
    eval('console.log('+sx+')');
}});

$(document).ready(function(){
    str   = 'Is this all this is?';
    exp_1 = /is/gi;
    exp_2 = /\s/g;
    exp_3 = /\w/g;

    str.src(exp_1);
    str.src(exp_2);
    str.src(exp_3);

    console.warn(
        '%cIs%c %cthis%c %call%c %cthis%c %cis?%c',
        'background:teal;color:silver','',
        'background:teal;color:silver','',
        'background:teal;color:silver','',
        'background:teal;color:silver','',
        'background:teal;color:silver',''
    );
});
顺便说一句,'?'不被视为单词字符。