JavaScript替换字符串中的变量

标签 javascript regex

我想写一个函数来用实际值替换字符串中的变量,例如:

function replaceUrl(url, data) {}

来电者可能是:

replaceUrl('/task/:module?taskId=:taskId#:hash', {
    module: 'm1',
    taskId: 't1',
    hash: 'h1'
});

我认为使用 RegEx 可能很容易实现这一点,但我不是很熟悉。

谁能提供一个简单的方法来解决这个问题?

最佳答案

一个简单的解决方案是根本不使用 RegEx。使用 Template literals

var module = 'm1',
    taskId = 't1',
    hash   = 'h1';

var url = `/task/${module}?taskId=${taskId}#${hash}`;

var module = 'm1',
    taskId = 't1',
    hash = 'h1';

var url = `/task/${module}?taskId=${taskId}#${hash}`;

document.body.innerHTML = url;

使用正则表达式:

function replaceUrl(url, data) {
    // Create regex using the keys of the replacement object.
    var regex = new RegExp(':(' + Object.keys(data).join('|') + ')', 'g');

    // Replace the string by the value in object
    return url.replace(regex, (m, $1) => data[$1] || m);
}

function replaceUrl(url, data) {
    var regex = new RegExp(':(' + Object.keys(data).join('|') + ')', 'g');

    return url.replace(regex, (m, $1) => data[$1] || m);
}


var updatedUrl = replaceUrl('/task/:module?taskId=:taskId#:hash', {
    module: 'm1',
    taskId: 't1',
    hash: 'h1'
});

console.log(updatedUrl);
document.body.innerHTML = updatedUrl;

关于JavaScript替换字符串中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36994853/

相关文章:

javascript - Firefox 扩展中的 SQLite3 错误

javascript - 有没有可能用 JavaScript/jQuery 解决这种情况?

regex - REGEX Sqlite不区分大小写不起作用

javascript - 如何在http策略的validate方法中访问请求url?

javascript - 重置缩放不符合轴极值

c# - 如何在 C# .net 中查找不包含特定使用正则表达式的字符串

regex - 在 sed 或 awk 中的两个匹配项之间的最后一行之前插入文本

python - re.findall 不匹配所有匹配项

ruby - 在 Ruby 中的正则表达式匹配之前插入字符串的好方法

javascript - 选择 - 搜索带重音的单词