#javascript #regex
Вопрос:
Как говорится в заголовке, мне нужно регулярное выражение, чтобы проверить, есть ли в строке эти четыре слова (Обновить, Откат, Пропустить, Не сейчас), и возвращать их только в том случае, если все они присутствуют, если нет, это ничего не возвращает.
Вот пример: {"Update":"iVBORw0KGgo","Rollback":"iVBORw0KGgo","Skip":"iVBORw0KGgo","Not Now":"iVBORw0KGgo"}
В этом случае он должен вернуться [Обновление, Откат, Пропустить, Не сейчас]
{"Update":"iVBORw0KGgo","Skip":"iVBORw0KGgo","Not Now":"iVBORw0KGgo"}
В этом случае он не должен возвращать никакого значения
Я пытался создать его сам, но мои знания о регулярном выражении очень просты: (Update|Rollback|Skip|Not Now)
Заранее спасибо!
Редактировать
Я заметил, что регулярное выражение может быть не лучшим способом достичь этого.
Комментарии:
1. Имеет ли значение порядок слов?
2. Нет, порядок не имеет значения, он просто должен соответствовать чему-либо, если найдено 4, и ничего, если отсутствует 1.
Ответ №1:
Используйте это:
^(?=.*"Update"s*:)(?=.*"Rollback"s*:)(?=.*"Skip"s*:)(?=.*"Not Now"s*:)
(?=...)
это означает, что если вы посмотрите в оба, то обнаружите эту закономерность.
Таким образом, пустое совпадение вернется, как только мы найдем все эти 4 шаблона.
Ответ №2:
В качестве альтернативы регулярному выражению вы можете использовать JSON.parse
для разбора строки в объект и Object.keys
получения свойств:
const str = `{"Update":"iVBORw0KGgo","Rollback":"iVBORw0KGgo","Skip":"iVBORw0KGgo","Not Now":"iVBORw0KGgo"}`;
const keys = Object.keys(JSON.parse(str))
const result = keys.sort().toString() == "Not Now,Rollback,Skip,Update" ? keys : "";
console.log(result)
Комментарии:
1. В вопросе не указано, что все четыре «ключа» должны присутствовать в строке, поэтому, возможно, что-то вроде (псевдокод)
(["Update", "Rollback", "Skip", "Not Now"] - keys).empty? ?....
2. @CarySwoveland Я могу ошибаться, но моя интерпретация поста ОП такова, что он есть. «возвращайте их только в том случае, если они все присутствуют, если нет, это ничего не вернет».
3. Да, но не
keys.sort().toString() == "Not Now,Rollback,Skip,Update"
произойдет ли сбой, если хэш содержит эти четыре ключа, но также и другие ключи? Я не знаю Javascript, но ваше заявление кажется довольно ясным.
Ответ №3:
Хотя регулярные выражения явно не являются хорошим инструментом для этой работы, вы можете сделать что-то вроде этого:
re.match("(?=.*Update.*)(?=.*Skip.*)",string)
"(?=WORD)"
соответствует, если выражение следует за ним, но не использует какую-либо строку.
Конечно, заполните регулярное выражение всеми 4 словами, которые вы хотите аналогичным образом.
Также обратите внимание, что регулярное выражение само по себе ничего не возвращает. Для этого вам нужно написать код.
Комментарии:
1. Тег-это Javascript, а не Python. В
(?=.*Update.*)
должно быть(?=.*"Update")
(трейлинг.*
не влияет).