[英]How do I replace multiple different parts of a string at once?
所以,我有一個字符串,它是一系列從 1 到 6 的數字。 根據所討論的數字,我想用不同的代碼替換每個。 這是針對 Discord 機器人的,因此六個數字中的每一個都應替換為不同的 Discord 表情符號代碼。 我試過使用 string.replace 鏈,但是,由於這些表情符號代碼包含數字,替換開始堆疊在彼此之上並替換替換(我知道那是滿嘴的。)這完全破壞了代碼。
這是一個示例鏈:
1 2 1 4 6
這是如何替換數字的索引:
1 = <:attr1:710526292784578581>
2 = <:attr2:710526292721664142>
3 = <:attr3:710526292642103398>
etc.
所以理想情況下它應該變成這樣的字符串,而不是因為替換鏈正在吞噬自己而最終混亂和混合。
<:attr1:710526292784578581> <:attr2:710526292721664142> <:attr3:710526292642103398>
我怎樣才能基本上一次完成這些替換,以便它們只影響字符串中的項目,而不會開始相互影響? 答案將不勝感激!
編輯:這是我自己對替換鏈的嘗試,它返回了一個錯誤的混亂。
var attribEmoji = attribResult.join(" ").replace(/1/g, "<:attr1:710526292784578581>").replace(/2/g, "<:attr2:710526292721664142>").replace(/3/g, "<:attr3:710526292642103398>");
你可以這樣做:
str = '1 2 1 4 6'; replacement = { '1': '<:attr1:710526292784578581>', '2': '<:attr2:710526292721664142>', '3': '<:attr3:710526292642103398>', '4': '<:attr4:710526292642103772>', '5': '<:attr5:710526292642103008>', '6': '<:attr6:710526292642105566>' } newStr = ''; for(var i = 0; i < str.length; i++) { newStr += replacement[str.charAt(i)]? replacement[str.charAt(i)]: str.charAt(i) } console.log(newStr)
在數字鏈中,如果每個數字后面都有一個空格,而替換數字沒有,那么這是一個很容易解決的問題。 創建一個圖標數組並循環遍歷它們,用正確的代碼用空格替換索引。
var emojis = []; emojis[1] = "<:attr1:710526292784578581>"; emojis[2] = "<:attr2:710526292721664142>"; emojis[3] = "<:attr3:710526292642103398>"; var chain = "1 2 3 "; emojis.forEach(function(i,v){ chain = chain.replace(v + " ",i + " "); }); console.log(chain);
const replaceMultiple = input => {
const mapping = {
'1': '<:attr1:710526292784578581>',
'2': '<:attr2:710526292721664142>',
'3': '<:attr3:710526292642103398>',
}
return input
.split(' ')
.map(inputNum => mapping[inputNum])
.join(' ')
}
用法
replaceMultiple('1 3 2')
// '<:attr1:710526292784578581> <:attr3:710526292642103398> <:attr2:710526292721664142>'
使用replace
的回調參數:
// Define the replacements as key/value pairs: let map = { "1": "<:attr1:710526292784578581>", "2": "<:attr2:710526292721664142>", "3": "<:attr3:710526292642103398>", // add as needed... }; // Create a regular expression from the keys: let regex = new RegExp(`[${Object.keys(map).join("")}]`, "g"); // sample input let attribResult = [1,2,1,3]; // Perform the substitutions var attribEmoji = attribResult.join(" ").replace(regex, m => map[m]); console.log(attribEmoji);
您可以使用 object 獲取相關值和替換值,然后搜索一個數字並替換為 object 中的值。
var replacements = { 1: '<:attr1:710526292784578581>', 2: '<:attr2:710526292721664142>', 3: '<:attr3:710526292642103398>', 4: '<:attr4:710526292642103398>', 5: '<:attr5:710526292642103398>', 6: '<:attr6:710526292642103398>' }, string = '1 2 1 4 6', replaced = string.replace(/[1-6]/g, v => replacements[v]); console.log(replaced);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.