RegEx在最后一个分号前找到一个字符串

时间:2016-11-30 22:04:49

标签: regex

我有以下正则表达式/\.(\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分钟内解决这个问题。你能帮忙吗?

2 个答案:

答案 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)

也许这就是你需要的那个?

@"\.([a-zA-Z0-9_.]+)[^;]*;[^;]*}$"

demo