Как я могу сопоставить этот шаблон?

#regex #visual-studio-code

#регулярное выражение #visual-studio-code

Вопрос:

У меня есть следующий текст:

 @keyframes slideRightIn10 {
  0% {
    -webkit-transform: translate3d(-10px, 0, 0);
            transform: translate3d(-10px, 0, 0);
  }
  to {
    -webkit-transform: translateZ(0);
            transform: translateZ(0);
  }
}
  

С помощью этого "((@)).*{" я могу сопоставить первую строку. Но как я могу сопоставить все, что находится внутри внешних фигурных скобок. независимо от наличия новых строк (n) или нет?

Ответ №1:

Некоторые реализации имеют глобальный флаг /g , некоторые позволяют сопоставлять разрывы с помощью [sS] . Поскольку у меня не установлен VSCode, я не могу проверить, что для него верно.

Проблема в том, чтобы найти окончание } , поскольку в коде примера есть некоторые (и их может быть даже больше в других css-переходах.

Возможно, вы захотите попробовать:

 @.*?{[sS] ?n}
  

Двойные закругленные скобки вокруг @ не имеют для меня никакого смысла. Один из них может иметь смысл, если вы хотите, чтобы пение было в группе, но я не вижу необходимости в этом 😉

Смотрите https://regexr.com/5duqs

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

1. Это работает, единственное исключение — когда все находится в одной строке.

2. Это правильно, но, поскольку вы не можете считать в регулярных выражениях, нет способа действительно сопоставить это в oneline-string . Если вы уверены, что у вас всегда будет ровно 2 параметра ключевого кадра, вы могли бы @([Ss]*?{){3}([Ss]*?}){2}