2016-05-13 100 views
0

我試圖讓功能DoDialogwizardWithArguments這是一個字符串中使用正則表達式:正則表達式,在字符串中刪除功能

字符串:

var a = 1 + 2;DoDialogWizardWithArguments('CopyGroup', '&act=enviarcliente', 96487, (Q.getBody().$.innerWidth()/4)*3, Q.getBody().$.innerHeight(), new Function("if(localStorage.getItem('atualizaPgsParaCli')){{Q.window.close();Q.window.proxy.reload();}}localStorage.removeItem('atualizaPgsParaCli');return true;"), false);p = q.getBOdy(); 

實際正則表達式(模式):

DoDialogWizardWithArguments\((.*\$?)\) 

結果預計:

DoDialogWizardWithArguments('CopyGroup', '&act=enviarcliente', 96487, (Q.getBody().$.innerWidth()/4)*3, Q.getBody().$.innerHeight(), new Function("if(localStorage.getItem('atualizaPgsParaCli')){{Q.window.close();Q.window.proxy.reload();}}localStorage.removeItem('atualizaPgsParaCli');return true;"), false) 

問題:

如果還有另一個圓括號「)」,它不是DoDialogWizardWithArguments函數的圓括號,正則表達式也得到了這個。

我怎樣才能得到他的打開和關閉括號的功能。

如果正則表達式不可能,最好的選擇是什麼?

例子正則表達式鏈接:https://regex101.com/r/kP2bQ4/1

+0

我不知道,如果你要能夠匹配這個使用正則表達式,因爲似乎沒有什麼辦法,以表明它結束的時候(至少不會,除非你設置你的結束條件匹配,直到它看到一個'p = q.getBOdy();',我不知道它會爲你工作 –

+0

是的,它可以是很多功能之後的事情,用戶可以創建命令,我只需要提取函數 – fdfey

+0

你想掃描一個字符串並得到輸出:DoDialogWizardWithArguments(「stuff」,「stuff」,.. ...); 如果是這樣,就這樣做: 「DoDialogWizardWithArguments([^,] *,[^,] *,[^,] *,([^,] *),。+);」這樣可以檢測到您的句子,但不是如果它h作爲有效的輸入。你想檢查函數是('this','this',1234,(something),true | false); ? 如果你只是想獲得DoDialogWizardWithArguments(...);使用我評論的內容。 –

回答

1

我可能會試圖簡化它是這樣的:

var str = @"var a = 1 + 2;DoDialogWizardWithArguments('CopyGroup', '&act=enviarcliente', 96487, (Q.getBody().$.innerWidth()/4)*3, Q.getBody().$.innerHeight(), new Function("if(localStorage.getItem('atualizaPgsParaCli')){{Q.window.close();Q.window.proxy.reload();}}localStorage.removeItem('atualizaPgsParaCli');return true;"), false);p = q.getBOdy();" 
var lines = str.Split(';'); 
foreach(var line in lines) 
{ 
    if(line.Contains("DoDialogWizardWithArguments")){ 
     int startPos = line.IndexOf("("); 
     int endPos = line.IndexOf(")");   
     return line.Substring(startPos+1, endPos - startPos - 1); 
    } 
} 
return "Not found"; 
+0

它也工作,謝謝 – fdfey

0

如果你不這樣做想要檢測DoDialogWizardWithArguments是否正確寫入,但只是函數本身,請嘗試使用「DoDialogWizardWithArguments([^,] ,[^,],[^,] ,([^,]),。+);「。 例子:

String src = @"xdasadsdDoDialogWizardWithArguments('CopyGroup', '&act=enviarcliente', 96487, (Q.getBody().$.innerWidth()/4)*3, Q.getBody().$.innerHeight(), new Function(" + "\"" 
       + "if(localStorage.getItem('atualizaPgsParaCli')){{Q.window.close();Q.window.proxy.reload();}}localStorage.removeItem('atualizaPgsParaCli');return true;" 
       + "\"" + "), false);p"; //An example of what you asked for 

System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(@"DoDialogWizardWithArguments([^,]*,[^,]*,[^,]*,([^,]*),.+);"); //This is your function 
MessageBox.Show(r.Match(src).Value); 
if (r.IsMatch(src)) 
    MessageBox.Show("Yeah, it's DoDialog"); 

else MessageBox.Show("Nope, Nope, Nope");