給出一個這樣的字串(它可以是任何模式,但格式如下):
lastname/firstname/_/country/postalCode/_/regionId/city/addressFirst/addressSecond/_/phone
我正在制作一個函式,當我傳遞一些地址部分時,該函式將回傳這些部分并洗掉未請求的額外部分,_如果洗掉了很多,則保持最大一個間距:
FE :
前:
input : ["country", "postalCode"]
return "country/postalCode
input : ["lastname", "firstname", "regionId"]
return "lastname/firstname/_/regionId"
input : ["firstname", "country", "regionId", "city"]
return "firstname/_/country/_/regionId/city"
input : ["country", "regionId", "phone"]
return "country/_/regionId/_/phone"
現在,我的方法如下:
type AddressPart = "firstname" | "lastname" | ... | "phone";
const allAddressParts = ["firstname", "lastname", ... ,"phone"];
static getAddress(
format = "lastname/firstname/_/country/postalCode/_/regionId/city/addressFirst/addressSecond/_/phone"
parts: AddressPart[],
) {
const toRemove = allAddressParts.filter((part) => !parts.includes(part));
toRemove.forEach((part) => {
format = format
.replace(`_/${part}/_`, '_')
.replace(new RegExp(part '/?'), '');
});
return format;
}
上面看起來沒問題,但最后失敗并開始:
_/country/postalCode/_/regionId/city/addressFirst/addressSecond/_/
如何在不重新回圈陣列的情況下洗掉/_/或者_/它是否位于開始或結束?
uj5u.com熱心網友回復:
您可以在最終字串上使用正則運算式來洗掉前導和尾隨不需要的符號
第一個正則運算式查找:
字串的開頭,帶有
^符號一個或多個“_/”,使用
將字符對分組的括號,
允許 1 個或多個的標志,以及一個反斜杠來逃避正斜杠
第二個正則運算式查找:
- 一種 ”/”
- 零個或多個“_/”,帶有
* - 帶有
$符號的字串的結尾
s1 = "_/country/postalCode/_/regionId/city/addressFirst/addressSecond/_/"
s2 = s1.replace(/^(_\/) /,"").replace(/\/(_\/)*$/,"")
console.log(s2)
你可以簡化
如果您確定開頭和結尾不會超過一個“_”,則不需要括號和 /*符號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/372517.html
標籤:javascript 正则表达式 打字稿
