Используйте регулярное выражение для проверки атрибута в Javascript переменных - PullRequest
0 голосов
/ 09 апреля 2020

Код JS показан ниже, я хочу использовать регулярное выражение для сопоставления со значением «logging» во всем методе «myfun c .call». Я использую (myfunc|\w+)\.call(.|\n)*logging, тогда он не найдет все 5 функций, как написать это регулярное выражение?

myfunc.call({
                                      "logging" : true
                                    });

myfunc.call({
    "logging" : true,
    //"mode": true,
  }, "project1");
myfunc.call({
    "devMode": true,
    "logging" : false,
  }, "project1");

myfunc.call({
    "apiKey":  "xxx",
    "baseURL": "HTTP://xxx",  // url used when not in dev mode
    "mode": false,   // mode
    "logging": true,  // logs events
  }, "project1");

myfunc.call({
    "apiKey":  "xxx"
  }, "project1");

В этом случае я хочу проверить, какая функция имеет значение, что атрибут logging является истинным только 3 функции соответствуют ей

1 Ответ

1 голос
/ 09 апреля 2020

Для данных примера вы можете начать сопоставлять myfunc\.call или \w+\.call, если имя функции может отличаться и соответствовать всем следующим строкам, которые не начинаются с функции или ведения журнала.

Значение "logging" может быть захвачено в группе (true|false), соответствующей либо true, либо false, либо символу без пробелов, кроме запятой ([^\s,]+), если могут быть другие значения без пробелов.

^myfunc\.call\({(?:\r?\n(?!\s*(?:"logging"|myfunc\.call)).*)*\r?\n.*"logging"\s*:\s*(true|false)

Объяснение

  • ^ Начало строки
  • myfunc\.call\({ Матч myfunc.call({
  • (?: Группа без захвата
    • \r?\n Соответствует новой строке
    • (?! Отрицательный взгляд вперед, утверждают, что справа не
      • \s*(?:"logging"|myfunc\.call) Соответствует либо "logging" or myfun c .call`
    • ) Закрыть взгляд
    • .* Соответствовать всей линии
  • )* Закрыть группу и повторить 0+ раз
  • \r?\n.*"logging" Совпадение с новой строки, затем сопоставление до "регистрации"
  • \s*:\s* Совпадение : между пробелами
  • (true|false) Захват lue в группа 1

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...