javascript - 在字符串中查找 ID 并从数组中替换

标签 javascript regex

我有一个字符串变量,它可能是这样的:

var content = "blah blah [media:id=1] blah blah blah [media:id=0] blah blah";

还有一组带有图像信息的对象,即

var imageArray = [
  {id:0, path:"/images/image.jpg"},
  {id:1, path:"/images/anotherimage.jpg"}
]

我需要一个函数来通过 id 将“[media:id=x]”替换为来自 imageArray 的相应图像对象路径,以便我的“内容”变量看起来像:

"blah blah <img src='/images/anotherimage.jpg' /> blah blah blah <img src='/images/image.jpg' /> blah blah";

但我不确定从哪里开始?

最佳答案

您可以使用 String#replace用它各自的图像元素替换字符串中的 id

content.replace(/\[media:id=(\d+)\]/g, function(m, id) {
    var path = imageArray.find(o => o.id === Number(id));
    if (path) {
        return `<img src="${path.path}" />`;
    }
    return m;
});

正则表达式 \[media:id=(\d+)\] 将匹配

  1. \[: [ 文字
  2. media:id= 文字
  3. (\d+): 一个或多个数放入捕获组
  4. \]:]字面量

Array#find可用于查找数组中的特定元素。

imageArray.find(o => o.id === Number(id))

将从字符串中获取 id 与匹配的 id 匹配的对象。如果在数组中找到object,则返回img标签,将其替换为else元素,返回完整字符串。

var content = "blah blah [media:id=1] blah blah blah [media:id=0] blah blah";
var imageArray = [{
    id: 0,
    path: "/images/image.jpg"
}, {
    id: 1,
    path: "/images/anotherimage.jpg"
}];

var res = content.replace(/\[media:id=(\d+)\]/g, function(m, id) {
    var path = imageArray.find(o => o.id === Number(id));
    if (path) {
        return `<img src="${path.path}" />`;
    }
    return m;
});

console.log(res);

关于javascript - 在字符串中查找 ID 并从数组中替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41114889/

相关文章:

javascript - 在 jquery ajax 成功部分之前先完成调用

java - catch22 : java pattern matcher regex, 在 '(' 字符处停止

c - 我该如何解决 munmap_chunk() : invalid pointer on regfree(&regex)

ruby - 在 Ruby 中,使用正则表达式来匹配单个数字的最正确方法是什么**没有其他**?

regex - 描述信用卡到期(有效)日期的正则表达式

javascript - HTML anchor 发送请求但不点击链接

javascript - 在 Node (node.js)中有效地从 Buffer 到 Buffer 进行 Base64 解码

javascript - DataTables循环遍历表并删除特定列中包含特定字符串的所有行

JavaScript:表单未通过 OnSubmit 进行验证

javascript - 递归中的变量.replace with regexp