Извлечь переменную, но не функцию из JavaScript от Regex - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь извлечь переменные (с точечной нотацией), но не функции из строки JavaScript, используя Regex.Это то, что я сделал до сих пор.

var regex = /([_a-zA-Z0-9\[\]]+(?:\.)?)+/g;

Однако это регулярное выражение также будет извлекать функции JavaScript.Например,

var regex = /([_a-zA-Z0-9\[\]]+(?:\.)?)+/g;
console.log("a.b.c(d.e) === f".match(regex));

выведет

["a.b.c", "d.e", "f"]

, но я ожидаю

["d.e", "f"]

1 Ответ

0 голосов
/ 20 марта 2019

После окончания совпадения вы можете отрицательно посмотреть на (, чтобы убедиться, что захваченная подстрока не является вызовом функции. Также отрицательный взгляд на любой из символов в том же самом начальном наборе символов, чтобы удостовериться, что возврат от неудачного совпадения функции не соответствует части подстроки функции:

var regex = /([\w[\]]+\.?)+(?![.\w[\]]|\s*\()/g;
console.log("a.b.c(d.e) === f + q[w]e && obj[prop]()".match(regex));

Вероятно, было бы лучше повторить группы из . с последующими символами слова или [ с последующими символами слова и ]:

var regex = /\w+(?:\.\w+|\[\w+\])+(?![([\].])/g;
console.log("a.b.c(d.e) === f + q[w].e && obj[prop]()".match(regex));

\w+(?:\.\w+|\[\w+\])+(?![([\].]) означает:

  • \w+ - Символы слова ([A-Za-z0-9_]+)
  • (?:\.\w+|\[\w+\])+ - Повторите либо:
    • \.\w+ - A . с последующими символами слова или
    • \[\w+\] - [, за которыми следуют символы слова, за которыми следует ]
  • (?![([\].]) - В конце паттерна отрицательный прогноз для (, [, ] и .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...