Я пытаюсь написать регулярное выражение для фильтрации параметров вызова руля:
пример вызова:
117-tooltip classes=(concat (concat "productTile__product-availability " classes) " tooltip--small-icon productAvailability__tooltip") bla=(concat "test" "test2")
какими должны быть мои совпадения:
какие у меня совпадения на данный момент:
мое регулярное выражение:
\((?>[^()]|(?R))*\)
Мне нужно расширить его, чтобы структура была чем-то=(...(...)..) с неизвестным количеством совпадающих скобок.
Как мне расширить регулярное выражение, чтобы добавить в него часть x=?
Я хотел бы использовать:
\b\w+=.*?(?=\s+\w+=|$)
Идея этого шаблона состоит в том, чтобы сопоставить ключ =, за которым следует все содержимое, ведущее к следующему ключу или концу ввода, но не включая его.
Объяснение:
\b\w+= match a KEY=
.*? match all content up, but not including
(?=\s+\w+=|$) assert that what follows is one or more
whitespace characters followed by KEY= OR
the end of the input
Вы можете использовать подпрограмму регулярного выражения :
(\w+)=(\(((?>[^()]++|(?2))*)\))
Посмотрите демонстрацию регулярного выражения . Подробности:
(\w+)
- Группа захвата 1: один или несколько символов слова=
- =
символ(\(((?>[^()]++|(?2))*)\))
— Группа 2 (необходима для работы подпрограммы регулярного выражения):
\(
- (
символ((?>[^()]++|(?2))*)
- Группа 3: ноль или более повторений одного или нескольких символов, кроме (
и )
, или рекурсия всего шаблона группы 2\)
- символ )
.большое спасибо, это, кажется, хорошо работает в моем тесте! Как мне переписать это, чтобы использовать его в Javascript? Похоже на? и ++ создает проблемы
@NthDegree Нет возможности использовать JavaScript, его RegExp
не поддерживает рекурсию. Используйте решение Тима в JS.
Используйте (\w+)=(\((?>[^()]++|(?2))*\))