字符串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个部分,将上面步骤中双引号的东西再还原不过貌似比较复杂,有简单点的方法吗?正则应该可以一步到位,求教高手。
希望得到这样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个部分,将上面步骤中双引号的东西再还原不过貌似比较复杂,有简单点的方法吗?正则应该可以一步到位,求教高手。
<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>
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));
<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>
直接替换多个连续空格为单个空格简单\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
其中的引号部分是作为一个整体不能做改变的,大家应该可以理解,因为它是一个文件路径。
用这个表达式就可以一步搞定了:
(".+?"|.+?)(?:\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