Это регулярное выражение делает это. Здесь выделено 10 слотов, но вы можете добавить столько, сколько хотите (сто?).
Это не значит, что вам нужно сопоставить 10 уникальных чисел в наборе, вы можете сопоставить что-либо меньшее или равное 10 (пример {5}
) или даже диапазон, например {3,7}
Слоты будут заполняться последовательно, начиная с 1. Итак, вам просто нужно сидеть в цикле от 1 до N, видя, если он определен.
Если вы ищете скорость, это демона, которого вы хотите!
/\{(?>(?>(?(1)(?!))((?&GetNum))|(?(2)(?!))((?&GetNum))|(?(3)(?!))((?&GetNum))|(?(4)(?!))((?&GetNum))|(?(5)(?!))((?&GetNum))|(?(6)(?!))((?&GetNum))|(?(7)(?!))((?&GetNum))|(?(8)(?!))((?&GetNum))|(?(9)(?!))((?&GetNum))|(?(10)(?!))((?&GetNum)))(?:,(?!\})|(?=\}))){3,7}\}(?(DEFINE)(?
https://regex101.com/ r / pPwPTe / 1
Читаемое регулярное выражение
# Unique numbers in set, 10 slots
\{
(?> # Atomic, no backtracking allowed
(?> # ditto
(?(1) (?!) ) ( (?&GetNum) ) # (1), Slot 1
| (?(2) (?!) ) ( (?&GetNum) ) # (2), Slot 2
| (?(3) (?!) ) ( (?&GetNum) ) # (3), Slot 3
| (?(4) (?!) ) ( (?&GetNum) ) # (4), Slot 4
| (?(5) (?!) ) ( (?&GetNum) ) # (5), Slot 5
| (?(6) (?!) ) ( (?&GetNum) ) # (6), Slot 6
| (?(7) (?!) ) ( (?&GetNum) ) # (7), Slot 7
| (?(8) (?!) ) ( (?&GetNum) ) # (8), Slot 8
| (?(9) (?!) ) ( (?&GetNum) ) # (9), Slot 9
| (?(10) (?!) ) ( (?&GetNum) ) # (10), Slot 10
)
(?: , (?! \} ) | (?= \} ) )
){3,7} # Set range, example: 3 to 7 unique numbers in set
\}
(?(DEFINE)
(? # (4) Get a new number, must not be seen before
(?! (?: \g{1}|\g{2}|\g{3}|\g{4}|\g{5}|\g{6}|\g{7}|\g{8}|\g{9}|\g{10} ) \b )
\d+
)
)
Как правильно описывает @Tinou, вы можете переименовывать и отключать поля подписки, сгенерированные с помощью @model
, используя аргумент subscriptions
, но вы также можете создавать собственные подписки, добавляя тип Subscription
в свою схему.
type Subscription {
customField(arg: String): String @aws_subscribe(mutations:["customPublish"])
}
При таком подходе вы можете добавлять любые поля и аргументы, которые вам нужны.