После окончания совпадения вы можете отрицательно посмотреть на (
, чтобы убедиться, что захваченная подстрока не является вызовом функции. Также отрицательный взгляд на любой из символов в том же самом начальном наборе символов, чтобы удостовериться, что возврат от неудачного совпадения функции не соответствует части подстроки функции:
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+\]
- [
, за которыми следуют символы слова, за которыми следует ]
(?![([\].])
- В конце паттерна отрицательный прогноз для (
, [
, ]
и .