我正在尝试使用正则表达式从一串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"]
答案 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+\]
-[
,后跟文字字符,后跟]
(?![([\].])
-模式结束时,(
,[
,]
和.
的负前瞻