字符串S实际是一个参数,共有5部分,一般是以空格隔开的,但是空格数目不定。可能是这样几种情况:1.原型为:-r c:\aa.txt c:\bb.txt QQ qq
希望得到这样5个结果:(1)-r (2)c:\aa.txt (3)c:\bb.txt(4)QQ (5)qq2.原型为:--r  "c:\Program Files\aa.txt"   c:\bb.txt  QQ  qq
希望得到这样5个结果:((1)-r (2)c:\Program Files\aa.txt (3)c:\bb.txt(4)QQ (5)qq请问有什么办法吗?我能想到的就是:
先将非双引号之间的多个连续空格替换成单个空格
然后再将双引号之间的内容临时替换成一个不含空格的字符
最后按空格分隔得到5个部分,将上面步骤中双引号的东西再还原不过貌似比较复杂,有简单点的方法吗?正则应该可以一步到位,求教高手。

解决方案 »

  1.   


    <script type="text/javascript">
    <!--
    var str = '-r  "c:\Program Files\aa.txt"  c:\\bb.txt  QQ  qq';
    str = str.split(/\s+(?!\w.*\")/);
    alert(str);
    //-->
    </script>
      

  2.   

    upvar getV=function(str) {
    str=str.split(' ');
    for(var i=0,res=[];i<str.length;i++) {
    var cur=str[i];
    if(cur)
    res.push(cur);
    }
    return res;
    }
    var str="-r c:\aa.txt c:\bb.txt QQ qq ";
    alert(getV(str));
      

  3.   

    try..
    <script type="text/javascript">
    <!--
    var result=[];
        var str = '-r  "c:\\Program Files\\aa.txt" "MM mm" c:\\bb.txt  QQ  qq';
        str=str.replace(/([ ]*[^ "]+[ ]*)|("[^"]+")/gi,function(val){
         result.push(val.replace(/^[ "]+|[ "]+$/gi,""));
         });
        alert(result);
    //-->
    </script>
      

  4.   

    啊 各位能不能用vbs的啊 有点小乱
    直接替换多个连续空格为单个空格简单\s+?替换成\s就ok了,但是下面这样的情况就不行了,例如:
    r "c:\Program    Files\aa.txt" c:\bb.txt   QQ qq
    替换后就变成了:
    r "c:\Program    Files\aa.txt" c:\bb.txt   QQ qq
    其中的引号部分是作为一个整体不能做改变的,大家应该可以理解,因为它是一个文件路径。
      

  5.   

    经过我的潜心研究终于解决了,不过也谢谢各位!
    用这个表达式就可以一步搞定了:
    (".+?"|.+?)(?:\s+|$)vb代码:
    Private Sub demo()
        Dim strData$
        Dim reg As Object
        Dim matches As Object, match As Object
        
        strData = "r ""c:\Program   Files\aa.txt"" ""c:\bb.txt""       QQ qq"
        Set reg = CreateObject("vbscript.regexp")
        reg.Global = True
        reg.IgnoreCase = True
        reg.Pattern = "("".+?""|.+?)(?:\s+|$)"
        
        Set matches = reg.Execute(strData)
        
        For Each match In matches
            Debug.Print match.SubMatches(0)
        Next
    End Sub
    输出结果:
    r
    "c:\Program   Files\aa.txt"
    "c:\bb.txt"
    QQ
    qq