#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*"
Совпадение с"..."
этого момента:
и необязательные символы пробелов
)
Близкая группа 1d
Совпадение 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 🙂