2016-11-30 77 views
0

我有以下的正則表達式/\.(\w+)/g represented here正則表達式的最後一個分號之前找到一個字符串

它匹配對這個樣本字符串:function() {__cov_0vpZ06dQffa98X1ZQ0lWVA.f['74']++;__cov_0vpZ06dQffa98X1ZQ0lWVA.s['211']++;return t.propertygroup.subproperty1;}

現在它匹配「fspropertygroup.subproperty1」,但我想它只匹配「propertyGroup.subproperty1」,或者如果它只是t.subproperty1,它只會匹配「subproperty1」。因此它應該在第一個時間段後查找所有單詞,但只能在最後一次出現分號之前查找。

上面的函數字符串是動態的(JavaScript),所以它可能隨時添加額外的帶有附加分號的語句,但我仍然只想匹配最後一個返回變量名稱。

我一整天都在和這個正則表達式作鬥爭,而你是一個正則表達式的專家,可能在5分鐘內解決這個問題。你能幫我嗎?

+0

是否有比這裏列出的一個更復雜的例子? – eddiem

+0

請參閱http://stackoverflow.com/editing-help –

回答

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);

+0

這匹配'propertygroup.subproperty1'' –

+0

@Jim前的一段時間,請檢查我的方法,如果它不是你的意思,請讓我知道。 –

+0

@WiktorStribiżew唯一的問題是該函數是動態的。它有不確定數量的分號,所以我不知道只有三個分號。我會編輯我的問題來說明。謝謝! –

0

或許這就是你需要的嗎?

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

demo

相關問題