Как сбросить версии в файле Package.json

#javascript #reactjs #regex

Вопрос:

У меня есть около 20 проектов react, все из которых имеют файлы package.json. У меня в них есть такие пакеты:

 "@material-ui/core": "4.11.4",
"@material-ui/icons": "4.11.2",
"@material-ui/lab": "4.0.0-alpha.58",
"@material-ui/styles": "4.11.4",
 

Мне нужно просмотреть каждую строку и обновить их до «0.0.0». Есть ли регулярное выражение, которое может соответствовать "***.***.***" и заменить его на «0.0.0» ?

Причина, по которой мне нужно это сделать: я создаю свои собственные пакеты. Я переместил их из одного места в другое, так что их версии снова начинались с 0. Если я выполняю проверку обновлений npm, и, например, пакет 5.8.34, он не обновит его до 0.0.1. Но если я обновлю все их значения до 0.0.0, а затем запущу проверку обновлений npm, он обновится до 0.0.1.

Кроме того, зачем кому-то голосовать здесь за -1? Вам не нравится вопрос или вы не знаете ответа? Я предоставил все, что мне нужно сделать здесь, и ниже приведены некоторые регулярные выражения, которые я пытался выполнить. Почему вы все еще голосуете за -1?

Я пытался: : "[0-9]. ?"

До сих пор это делает лучшую работу : "[0-9].[0-9].[0-9]"

Он не найдет те, в названии которых есть буквы, такие как "@material-ui/lab": "4.0.0-alpha.58" . Если кто-нибудь поделится лучшим решением, я обновлю вопрос.

Это чисто вопрос о том, как сбросить версии пакетов в файле Package.json до 0.0.0.

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

1. Почему вы должны изменить их на «0.0.0»?

2. Я создаю свои собственные пакеты. Я переместил их из одного места в другое, так что их версии снова начинались с 0. Если я выполняю проверку обновлений npm, и, например, пакет 5.8.34, он не обновит его до 0.0.1. Но если я обновлю все их значения до 0.0.0, а затем запущу проверку обновлений npm, он обновится до 0.0.1.

Ответ №1:

Если все пакеты начинаются с цифры, за которой следуют точка и символы слов, которые при необходимости могут содержать дефис между символами слов, вы можете использовать группу захвата и использовать ее при замене.

Шаблон:

 ("[^s"] ":s*")d (?:.w (?:-w )*) ",
 

Шаблон совпадает:

  • ( Группа захвата 1 (обозначается $1 в примере кода)
    • "[^s"] ":s*" Совпадение с "..." этого момента : и необязательные символы пробелов
  • ) Близкая группа 1
  • d Совпадение 1 цифр
  • (?: Группа без захвата
    • .w (?:-w )* Сопоставьте символы . 1 слов и, при необходимости - , символы 1 слов
  • ) Закройте группу без захвата и повторите 1 раз
  • ", Сопоставьте двойную кавычку и запятую

Заменить на

 $10.0.0",
 

Демонстрация регулярных выражений

 const regex = /("[^s"] ":s*")d (?:.w (?:-w )*) ",/;
[
  `"@material-ui/core": "4.11.4",`,
  `"@material-ui/icons": "4.11.2",`,
  `"@material-ui/lab": "4.0.0-alpha.58",`,
  `"@material-ui/styles": "4.11.4",`
].forEach(s => console.log(s.replace(regex, `$10.0.0",`))); 

Ответ №2:

Я думаю

 : "[0-9]. ?"
 

Для

 : "0.0.0"
 

должно быть примерно достаточно (и не должно соответствовать слишком многим вещам, но, конечно, вы проверите, прежде чем вносить изменения…)

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

1. Это тоже соответствует этому, тхо : "64x64 32x32 24x24 16x16"

2. это также соответствует : "0px"

3. Возможно, ограничьте свой поиск и замену пакетом.jsons 🙂