javascript
  • variables
  • replace
  • 2011-03-16 55 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

    相關問題