#javascript #regex #typescript
#язык JavaScript #регулярное выражение #машинописный текст
Вопрос:
дайте строку, подобную этой (это может быть любой шаблон, но в следующем формате):
lastname/firstname/_/country/postalCode/_/regionId/city/addressFirst/addressSecond/_/phone
Я создаю функцию, которая, когда я передам некоторые адресные части, функция вернет эти части и удалит дополнительные части, которые не запрашиваются и содержат максимум один интервал _
, если их много, если они удалены:
Фе :
бывшие :
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) =gt; !parts.includes(part)); toRemove.forEach((part) =gt; { format = format .replace(`_/${part}/_`, '_') .replace(new RegExp(part '/?'), ''); }); return format; }
все вышесказанное выглядит нормально, но в конце концов это не сработает и начнется :
_/country/postalCode/_/regionId/city/addressFirst/addressSecond/_/
Как я могу удалить /_/
или _/
если он расположен в начале или в конце, не перехватив массив ?
Комментарии:
1. Попробуйте это
string.replace(/^_/$/, '')
Ответ №1:
Вы можете использовать регулярные выражения в последней строке для удаления начальных и конечных нежелательных символов
Первое регулярное выражение ищет:
- Начало строки с
^
символом - Один или несколько «_/», используя
скобки для группировки пары символов,
обратная косая черта, чтобы избежать прямой косой черты
И второе регулярное выражение ищет:
- a «/»
- ноль или более «_/», с
*
- конец строки с
$
символом
s1 = "_/country/postalCode/_/regionId/city/addressFirst/addressSecond/_/" s2 = s1.replace(/^(_/) /,"").replace(//(_/)*$/,"") console.log(s2)
Возможно, вам удастся упростить
Если вы точно знаете, что в начале будет не более одного «_» и одного в конце, вам не нужны круглые скобки и
*
символы/.
Комментарии:
1. Я придумал это
.match("^/?_?/?(.*?)/?_?/?$")
и поймал группу 1, это тоже сработало бы ? 😡2. Это сработало бы, но это не совсем проверка критериев, которые вы описали. Ваша предлагаемая версия также будет искать и удалять начальное подчеркивание в строке
_underground/overground/wombling/free
. Для вашего будущего здравомыслия в кодировании желательно искать и удалять именно то, что вы считаете посторонним текстом, потому что вы сможете распознать его, когда начнете редактировать код.