2012-08-11 31 views
1

我使用jQuery嘗試這樣的事:如何使用正則表達式和jQuery替換爲兩個獨立的字符串並使用兩個單獨的替換字符串?

$('input').keyup(function(e){ 
    var val = $(this).val(); 

    var smileString = val.replace(/[:][)]/g, '<img src="smile.png" />'); 
    $('#regexoutput').html(smileString); 

    var frownString = val.replace(/[:][(]/g, '<img src="frown.png" />'); 
    $('#regexoutput').html(frownString); 
}) 

有沒有辦法用一個表達式來做到這一點?以上代碼僅適用於底層替換。

+0

你有看的更換和HTML API文檔? – 2012-08-11 00:17:40

+0

@AaronKurtzhals我無法找到一個條目replace(),但爲html(),是的。這種技術只適用於底層替換。 – nipponese 2012-08-11 00:21:01

+0

感謝您的澄清;它有幫助。 – 2012-08-11 00:34:03

回答

1
$('input').keyup(function(e){ 
    var val = $(this).val(); 

    var smileString = val.replace(/[:][)]/g, '<img src="smile.png" />'). 
     replace(/[:][(]/g, '<img src="frown.png" />'); 

    $('#regexoutput').html(smileString); 

}); 
+0

請注意,如果文本很長,我發佈的最後一個解決方案更好,因爲它只掃描一次字符串。這將掃描兩次並生成垃圾兩次。如果字符串很短,可以正常工作。 – Gene 2012-08-11 00:40:41

1

我想你想

$('input').keyup(function(e){ 
    var val = $(this).val(); 

    val = val.replace(/[:][)]/g, '<img src="smile.png" />'); 
    val = val.replace(/[:][(]/g, '<img src="frown.png" />'); 

    $('#regexoutput').html(val); 
}) 

你也可以用一個replace操作做,如果你做的第二ARG是檢查匹配字符串並返回正確結果的函數。

未經測試:

val = val.replace(/:\)/g, function (s) { 
     var fn = s == ':)' ? 'smile' : 'frown'; 
     return '<img src="' + fn + '.png" />' 
     }); 
+0

這絕對是一個聰明的方法,但對我的需求太具體。 – nipponese 2012-08-11 00:40:43

相關問題