我有以下正则表达式/\.(\w+)/g
represented here
它与此示例字符串匹配:function () {__cov_0vpZ06dQffa98X1ZQ0lWVA.f['74']++;__cov_0vpZ06dQffa98X1ZQ0lWVA.s['211']++;return t.propertygroup.subproperty1;}
现在它正在匹配" f.s.propertygroup.subproperty1",但我希望它只匹配" propertyGroup.subproperty1"或者如果它只是t.subproperty1它只匹配" subproperty1"。所以它应该在第一个时期之后找到所有单词,但只能在最后一次出现分号之前找到。
上面的函数字符串是动态的(JavaScript),所以它可能随时添加带有额外分号的其他语句,但我仍然只想匹配最后一个返回变量名。
我整天都在与这个正则表达式作斗争,而你,一个正则表达的大师,可能会在5分钟内解决这个问题。你能帮忙吗?
答案 0 :(得分:1)
使用积极的前瞻:
\.(\w+)(?=[^;]*;[^;]*$)
^^^^^^^^^^^^^^^^
请参阅regex demo
(?=[^;]*;[^;]*$)
只会匹配.
+字字符,如果它们后面跟着除;
以外的0 +字符,然后是;
以及0 +字符以外的其他字符;
直到字符串结尾。
JS代码:
var regex = /\.(\w+)(?=[^;]*;[^;]*$)/g;
var str = "function () {__cov_0vpZ06dQffa98X1ZQ0lWVA.f['74']++;__cov_0vpZ06dQffa98X1ZQ0lWVA.s['211']++;return t.propertygroup.subproperty1;}";
var res = [], m;
while ((m = regex.exec(str)) !== null) {
res.push(m[1]);
}
console.log(res);

或另一个:
var s = "function () {__cov_0vpZ06dQffa98X1ZQ0lWVA.f['74']++;__cov_0vpZ06dQffa98X1ZQ0lWVA.s['211']++;return t.propertygroup.subproperty1;}";
var res = s.match(/\.(\w+)(?=[^;]*;[^;]*$)/g).map(function(x) {return x.slice(1);});
console.log(res);

答案 1 :(得分:0)