Удалите часть строки с помощью регулярного выражения и замените

#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:

Вы можете использовать регулярные выражения в последней строке для удаления начальных и конечных нежелательных символов

Первое регулярное выражение ищет:

  • Начало строки с ^ символом
  • Один или несколько «_/», используя

    скобки для группировки пары символов,

    знак, разрешающий 1 или более, и

    обратная косая черта, чтобы избежать прямой косой черты

И второе регулярное выражение ищет:

  • a «/»
  • ноль или более «_/», с *
  • конец строки с $ символом
 s1 = "_/country/postalCode/_/regionId/city/addressFirst/addressSecond/_/" s2 = s1.replace(/^(_/) /,"").replace(//(_/)*$/,"") console.log(s2) 

Возможно, вам удастся упростить

Если вы точно знаете, что в начале будет не более одного «_» и одного в конце, вам не нужны круглые скобки и * символы/.

Комментарии:

1. Я придумал это .match("^/?_?/?(.*?)/?_?/?$") и поймал группу 1, это тоже сработало бы ? 😡

2. Это сработало бы, но это не совсем проверка критериев, которые вы описали. Ваша предлагаемая версия также будет искать и удалять начальное подчеркивание в строке _underground/overground/wombling/free . Для вашего будущего здравомыслия в кодировании желательно искать и удалять именно то, что вы считаете посторонним текстом, потому что вы сможете распознать его, когда начнете редактировать код.