正则表达式,删除字符串

时间:2016-05-13 19:56:02

标签: c# regex

我正在尝试使用正则表达式获取字符串内的函数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函数的括号,那么正则表达式也是如此。

我怎样才能用他的开括号和近括号来获得该功能。

如果无法使用Regex,那么更好的选择是什么?

示例正则表达式链接:https://regex101.com/r/kP2bQ4/1

3 个答案:

答案 0 :(得分:1)

尝试将此作为正则表达式:https://regex101.com/r/kP2bQ4/2

DoDialogWizardWithArguments\(((?:[^()]|\((?1)\))*+)\)

答案 1 :(得分: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";

答案 2 :(得分: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");