我想知道如何拆分并替换 javascript 中带有连字符的文本。
如果 url 是英文,则转换为值,反之亦然。
var object ={
"transfer-money-from-": "hui-kuan-cong-",
"aruba": "a-lu-ba",
"australia": "ao-da-li-ya",
"azerbaijan": "a-sai-bai-jiang",
"to": "zhi"
}
MyScenario Start
ExpectedOutput:
if url is www.xyz.com/en/transfer-money-from-azerbaijan-to-australia?scy=AUD&amt=1000
=> output :www.xyz.com/en/transfer-money-from-azerbaijan-to-australia?scy=AUD&amt=1000
if url is www.xyz.com/zh/transfer-money-from-azerbaijan-to-australia?scy=AUD&amt=1000
=> output: www.xyz.com/zh/hui-kuan-cong-a-sai-bai-jiang-zhi-ao-da-li-ya?scy=AUD&amt=1000
if url is www.xyz.com/en/hui-kuan-cong-a-sai-bai-jiang-zhi-ao-da-li-ya?scy=AUD&amt=1000G
=> output: www.xyz.com/en/transfer-money-from-azerbaijan-to-australia?scy=AUD&amt=1000
var lang = "zh";
var getPath = changeUrl(object, "transfer-money-from-azerbaijan-to-australia?scy=AUD&amt=1000");
const result = "www.xyz.com/" + lang + "/"+ getPath ;
function changeUrl(object, url){
const re = new RegExp(Object.keys(object).join('|'), 'g');
const output = url.replace(re, match => object[match]);
return output;
}
MyScenario End
最佳答案
我会通过在对象的所有键之间交替构造一个正则表达式,然后使用替换函数来查找替换值:
const object = {
"transfer-money-from-": "hui-kuan-cong-",
"aruba": "a-lu-ba",
"australia": "ao-da-li-ya",
"azerbaijan": "a-sai-bai-jiang",
"to": "zhi"
};
const re = new RegExp(Object.keys(object).join('|'), 'g');
const url = "/en/transfer-money-from-azerbaijan-to-australia";
const output = url.replace(re, match => object[match]);
console.log(output);
反过来,只需切换对象的键和值:
const object = {
"transfer-money-from-": "hui-kuan-cong-",
"aruba": "a-lu-ba",
"australia": "ao-da-li-ya",
"azerbaijan": "a-sai-bai-jiang",
"to": "zhi"
};
const switchedObj = Object.fromEntries(
Object.entries(object).map(
([key, val]) => [val, key]
)
);
const re = new RegExp(Object.keys(switchedObj).join('|'), 'g');
const url = "/en/hui-kuan-cong-a-sai-bai-jiang-zhi-ao-da-li-ya";
const output = url.replace(re, match => switchedObj[match]);
console.log(output);
关于javascript - 使用javascript替换带有连字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56987211/