繁体   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