2013-03-04 61 views
0

是否可以使用正則表達式和jQuery返回有條件的輸出,我想換成方括號的圖片環繞數字:jQuery的條件的正則表達式返回輸出

[1]將成爲<span><img src="1.png"></span>

在那裏我有[11]它會取代它成爲

<span><img src="1.png"><img src="1.png"></span>

在那裏我有[1e1]它會取代它成爲

<span><img src="1.png"><img src="e.png"><img src="1.png"></span>

但是如果只是文字將保留原樣無論長短

[qu]將成爲<span><img src="qu.png"></span>

這是我的代碼至今:

$('p').each(function() { 
    var txt = $(this).text();    
    var html = txt.replace(/\[(.*?)\]/g, function($1){ 

     if($1.length<=3) { 
      return $1.replace(/\[(.*?)\]/g,'<span class=\'rehMark\'><img src="img/$1.png" alt="$1" /></span>') 
     }else{ 

// this is the bit I would like help with! 
// and how to deal with text rather than numbers 

      return '<span class=\'lngRehMark\'>' 

      for (i=0; i<$1.length; i++) 
      { 
       return '<img src="img/' + $1 + '.png" alt="' + $1.length + '" /></span>' 
      } 
      return '</span'>' 
     } 
    }); 

    $(this).html(html); 
}); 

回答

1

您可以使用split,mapjoin[12]<img>元素的數組。

還要注意,替換回叫的第一個參數包含完全匹配的字符串(例如[11]),而不是第一個匹配的組(例如11)。

$('p').each(function() { 
    var txt = $(this).text();    
    var html = txt.replace(/\[([^\]]*)\]/g, function(match, chars){ 
     var images; 
     if (chars.match(/^[^0-9]*$/)) 
      images = '<img src="img/' + chars + '.png" />'; 
     else 
      images = $(chars.split('')) 
       .map(function() { return '<img src="img/' + this + '.png" />'; }) 
       .get().join(''); 
     return '<span class=\'lngRehMark\'>' + images + '</span>'; 
    }); 

    $(this).html(html); 
}); 
+0

我有括號內的信息e.g的多個實例「[4] [5] OK」 - 這將替換第一個和最後支架之間的一切,有沒有什麼辦法來修改它做的每一個實例? – Spufferoo 2013-03-04 14:16:38

+0

當然,我已經修復了代碼。只需將「(。*)」替換爲「([^]] *)」(匹配任何字符與匹配除''之外的任何字符])。 – 2013-03-04 14:23:09

+0

我已經改變了代碼,因爲你已經取得了 - 它現在只匹配有數字和文本值[1]被忽略但[1e]被改變,將會有三個[1],[dq], [3eq],[q3]將全部爲有效文本,由每個字符的圖像替換。謝謝 – Spufferoo 2013-03-04 14:48:02