变量数组+正则表达式不能一起工作
variable array + regular expression not working together?
im正在制作一个小的smiley脚本,它所做的是将:1::更改为div的图像html。
代码如下:
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
所做的一切都很好,完全正常,我们只是倾向于不使用"数组"这个词("map"在JS世界中更常见)。
相关文章:
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- document.title函数可以't设置它与php一起工作
- "此网站似乎使用滚动链接定位效果.这可能不能很好地与异步平移一起工作;
- 非常简单的js测试;Don’不要和Minko一起工作
- 无法使我的文本参数与我的查询一起工作
- 为什么Angularjs验证don't与输入[type=“number”]一起工作
- 无法使vash 0.8.0与express 4.12.3一起工作
- 如何使Angular JS控制器与指令一起工作
- 无法使autocompletion与bootstrap和php代码点火器一起工作
- 注入的元素和jQuery脚本.如何让他们一起工作
- 两个独立工作的javascript函数,但不能一起工作
- 角度和砖石一起工作
- Node http-proxy-middleware 不能与本地服务器一起工作
- jQuery脚本不想一起工作
- page.js使examples/hash与hashbang:true一起工作
- javascript使jquery倒计时与UTC时间一起工作
- jQuery.not()选择器无法与类一起工作
- Rails3-可排序列表不能与wysihtml5一起工作
- 替换匹配函数给出了未定义的错误,但它与替换一起工作
- 按钮上的数据加载消息无法与ajax调用一起工作