正则表达式从JavaScript中提取变量但不提取功能

时间:2019-03-20 03:58:05

标签: javascript regex

我正在尝试使用正则表达式从一串JavaScript提取变量(带点符号),但不提取函数。这是我到目前为止所做的。

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 :(得分:0)

比赛结束后,您可以对(进行否定超前查询,以确保捕获的子字符串不是函数调用。对于同一初始字符集中的任何字符,也要进行负向超前查找,以确保从失败的函数匹配中回溯不匹配函数子字符串的一部分:

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+-一个.后跟文字字符,或
    • \[\w+\]-[,后跟文字字符,后跟]
  • (?![([\].])-模式结束时,([].的负前瞻