proporcione una cadena como esta (puede ser cualquier patrón, pero el siguiente formato):
lastname/firstname/_/country/postalCode/_/regionId/city/addressFirst/addressSecond/_/phone
Estoy creando una función que, cuando paso algunas partes de la dirección, la función devolverá esas partes y eliminará las partes adicionales que no se solicitan y mantendrá un espacio _ , si se eliminaron muchas:
FE :
ej:
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"Ahora, mi método es el siguiente:
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; }lo anterior se ve bien, pero falla al final y comienza:
_/country/postalCode/_/regionId/city/addressFirst/addressSecond/_/
¿Cómo puedo eliminar /_/ o _/ si está situado al inicio o al final sin volver a recorrer la matriz?
La primera expresión regular busca:
Comienzo de la cadena, con el símbolo ^
Uno o más "_/", usando
paréntesis para agrupar el par de caracteres,
el signo + para permitir 1 o más, y
una barra invertida para escapar de la barra inclinada
Y la segunda expresión regular busca:
*$ s1 = "_/country/postalCode/_/regionId/city/addressFirst/addressSecond/_/" s2 = s1.replace(/^(_\/)+/,"").replace(/\/(_\/)*$/,"") console.log(s2) Si sabe con certeza que no habrá más de un "_" al principio y uno al final, no necesita los paréntesis y los símbolos + / * .