簡體   English   中英

變量數組+正則表達式不能一起工作?

[英]variable array + regular expression not working together?

我做了一個小的笑臉腳本,它的作用是將:: 1 ::改為圖像html為div。

代碼如下:

var smileys = {
  '1': 'http://domain.com/smiley1.gif',
  '2': 'http://domain.com/smiley2.gif',
  '3': 'http://domain.com/smiley3.gif'
};

function checksmileys(){   
x$('.message').each(function() 
  var start = '<img src="';
  var end = '">';
  x$(this).html( x$(this).html().replace(/::(\d+)::/g, start + smileys['$1'] + end) );
});

Checksmileys功能由用戶事件觸發。

但是它無法從句子中獲取數字(即id)。 它繼續產生這個<img src="undefined">

我的HTML示例如下:

<div id="chat">
   <ul>
     <li class="message">Hi john</li>
     <li class="message">what are you doing</li>
     <li class="message">::1:: nothing</li>
     <li class="message">hi</li>
     <li class="message">nice to meet you ::1::</li>
   </ul>
</div>

我的問題在哪里?

我想你需要一個函數:

html = html.replace(/::(\d+)::/g, function($0, $1) { return start + smileys[$1] + end })

這是html()的功能形式派上用場的時候

$(this).html(function(_, oldhtml) { 
    return oldhtml.replace(/::(\d+)::/g, function($0, $1) { 
        return start + smileys[$1] + end; 
    })
})

在JavaScript中,屬性名稱沒有像PHP中經常使用的前綴。 您在smileys對象中創建的屬性的名稱是1 ,而不是$1 ,因此將smileys['$1']更改為smileys['1']

更新 :從下面的評論中,您似乎正在嘗試使用$1來引用捕獲組。 僅當$1是您傳入的字符串的一部分時才有效,但表達式start + smileys['$1'] + end在調用replace 之前進行評估,然后傳遞給它。 smileys['$1']將不確定。

由於您正在嘗試進行查找,最好的辦法是傳入一個執行查找的函數:

x$(this).html( x$(this).html().replace(/::(\d+)::/g, function(m, c1) {
    return start + smileys[c1] + end;
}) );

c1是第一個捕獲組的文本。 更多


你把它稱為一個數組,我猜是因為你習慣了PHP中的術語“關聯數組”。 你的smileys對象只是一個對象,而不是一個數組。 在JavaScript中,當我們說“數組”時,我們指的是通過[]new Array創建的東西,它具有特定類屬性名稱(數字)的特定處理,特殊length屬性和一些方便的類數組函數。 你使用smileys所做的完全正常,完全正常,我們傾向於不使用“數組”這個詞(“地圖”在JS世界中更常見)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM