javascript
  • variables
  • replace
  • 2011-03-16 91 views 0 likes 
    0

    我一直在寻找,我发现这个Question堆栈溢出 所以我一直在努力使它与我的代码工作,我似乎无法得到它工作。查找和动态替换文本Javascript(不区分大小写)

    html = '<li style="list-style:none;">'; 
           cmnt = this.comment.replace(new RegExp("(" + preg_quote(firsttext) + ")" , 'gi'), "<span class='cutecl'>$1</span>"); 
           cmnt = cmnt.replace(new RegExp("(" + preg_quote(secondtext) + ")" , 'gi'), "<span class='wincl'>$1</span>"); 
           cmnt = cmnt.replace(new RegExp("(" + preg_quote(thirdtext) + ")" , 'gi'), "<span class='failcl'>$1</span>"); 
           html += cmnt; 
           html += '<br/><a href="http://www.youtube.com/userPage.php?author='+escape(this.author)+'">'+this.author+'</a>'; 
           html += '<span class="label"> - '+(this.published.getMonth() + 1)+'/'+this.published.getDate()+'/'+this.published.getFullYear()+'</span>'; 
           html += '</li>'; 
           $('#comment').append(html); 
    

    ,当然还有:

    function preg_quote(str) { 
    return (str+'').replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1"); 
    

    }

    时,我有

    cmnt = this.comment.replace(new RegExp("(" + preg_quote(firsttext) + ")" , 'gi'), "<span class='cutecl'>$1</span>"); 
          cmnt = cmnt.replace(new RegExp("(" + preg_quote(secondtext) + ")" , 'gi'), "<span class='wincl'>$1</span>"); 
          cmnt = cmnt.replace(new RegExp("(" + preg_quote(thirdtext) + ")" , 'gi'), "<span class='failcl'>$1</span>"); 
    

    包括在我的代码什么时,我想它来创建,李出现,但如果它走了,它工作正常,任何线索我做错了什么?在此先感谢,阿里

    这是问题的一个小提琴:http://jsfiddle.net/Yg8Qe/2/

    +0

    顺便说一句我思念的东西或不使用JS'\ 1'其匹配参考,不'$ 1'? – 2011-03-16 23:46:35

    +0

    @Brad Christie这完全有可能,我只是使用从其他问题收集的信息:p – Ali 2011-03-17 01:30:19

    +0

    JavaScript是$ – epascarello 2011-03-17 04:19:09

    回答

    1

    从OP获得更多信息后,这里的修复:不要硬编码$1 S IN的替换字符串。

    function preg_quote(str) { 
        return (str + '').replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1"); 
    } 
    
    function wrap(data, search, before, after) { 
        return data.replace(new RegExp(preg_quote(search), 'gi'), before + search + after); 
    } 
    
    var var1 = "var1", 
        var2 = "var2", 
        var3 = "var3", 
        cmnt = "this comment will be replaced with var1 var2 var3"; 
    
    cmnt = wrap(cmnt, 'var1', '<span class="cutecl">', '</span>'); 
    cmnt = wrap(cmnt, 'var2', '<span class="wincl">', '</span>'); 
    cmnt = wrap(cmnt, 'var3', '<span class="failcl">', '</span>'); 
    
    $('#comment').append('<li style="list-style:none;">' + cmnt + '</li>'); 
    

    许多这里代码清理的:缩进,分号,消除不必要的变量,并把该“包装”逻辑到一个很好的,可重复使用的功能。

    Demo →


    它看起来像你错过了在该代码的第一线cmnt = this.comment. “是行不通的。”

    // ↓↓↓ right here 
    cmnt = this.comment.replace(new RegExp("(" + preg_quote(firsttext) + ")" , 'gi'), "<span class='cutecl'>$1</span>"); 
    cmnt = cmnt.replace(new RegExp("(" + preg_quote(secondtext) + ")" , 'gi'), "<span class='wincl'>$1</span>"); 
    cmnt = cmnt.replace(new RegExp("(" + preg_quote(thirdtext) + ")" , 'gi'), "<span class='failcl'>$1</span>"); 
    

    +0

    我之所以这样做的原因是,如果您从第一个代码块中获取该信息,那么您将得到cmnt = this .comment然后html + = cmnt 它实际上看起来不像代码中的那样,它看起来像第一个代码块 – Ali 2011-03-18 00:51:04

    +0

    好吧,那是故意的?就其本身而言,您问题中的第三个代码块(我“纠正的”)在语法上不是有效的。如果你可以编辑你的问题来更清楚地知道你正在尝试的代码是什么,这将会有所帮助。这个问题的[demo](http://jsfiddle.net)也会很有用。 – 2011-03-18 00:54:17

    +0

    好吧,对不起,我会尽快把小提升起来 – Ali 2011-03-18 01:00:28

    相关问题