//如我有JS语句:parent.mygrid.addRow(1,"AB","5");
    //然后我要把他们的参数都取出来
    var regex = new System.Text.RegularExpressions.Regex("parent\\.mygrid\\.addRow\\((?:([^,.]+),)*");
    var m = regex.Match("parent.mygrid.addRow(1,\"AB\",\"5\")");
    if (m.Success)
    {
        for (int i = 0; i <= m.Groups[1].Captures.Count - 1; i++)
        {
            Console.WriteLine(m.Groups[1].Captures[i].Value);
        }
    }
    //上面的语句只能取出 
    //1
    //"AB"
    //因为最后1个5后面没有","    
    //而且这东西这正则没有考虑到字符串里面有,
    //如parent.mygrid.addRow(1,"A,B","5");
    //如parent.mygrid.addRow(1,"A\",B","5");
    //这些特殊情况
    //那要正确的提取出JS方法里面的所有参数这正则要怎么写呢?
    //谢谢

解决方案 »

  1.   

    按照逗号拆分,文本里面还有逗号,这样不就冲突了吗?
    str.split(',')
      

  2.   

    try...string test = @"如我有JS语句:parent.mygrid.addRow(1,""AB"",""5"");
    而且这东西这正则没有考虑到字符串里面有,
    如parent.mygrid.addRow(1,""A,B"",""5"");
    如parent.mygrid.addRow(1,""A\"",B"",""5"");";
    Regex reg = new Regex(@"(?i)(?<=parent\.mygrid\.addRow\()(?:(""(\\.|[^""\\])*""|[^,"")]+),?)+\);");
    MatchCollection mc = reg.Matches(test);
    foreach (Match m in mc)
    {
         foreach (Capture c in m.Groups[1].Captures)
         {
              richTextBox2.Text += c.Value + "\n";
         }
         richTextBox2.Text += "===============================";
    }
    /*--------输出--------
    1
    "AB"
    "5"
    ===============================1
    "A,B"
    "5"
    ===============================1
    "A\",B"
    "5"
    ===============================
    */
      

  3.   

    上面的正则,环视用得有点不伦不类,这里不用更好些Regex reg = new Regex(@"(?is)parent\.mygrid\.addRow\((?:(""(\\.|[^""\\])*""|[^,"")]+),?)+\);");