我试图通过空格和双引号(“)在Javascript中拆分字符串,但是有一个特殊条件:只有当第一个字符串前面有空格/字符串开头且第二个字符串后跟空格或两个引号时,两个引号才匹配字符串的结尾。
一些例子:
"a "b cd"
变为['a "b cd']
"a b" cd"
变为['a b', 'cd"']
"a "b" "x"" cd"
变为['a "b', 'x"', 'cd"']
请注意,不遵守上述条件的引号仍保留在相应的原子中。
我有一个正则表达式,它按空格和分组引号分开,但我不能完全找出符合我所说的那个。
/(?:[^\s"]+|"[^"]*")+/g
将引号2分为2,但这并不好。
答案 0 :(得分:0)
我相信这应该符合您的要求: -
((^ | “*(\ W?| $)” \ S))
答案 1 :(得分:0)
这是一个或多或少的手动解决方案:
function split(s){
var s = ' '+s+' ';
var OUT = 0, IN = 1;
var chunk = "";
var results = [];
var state = OUT;
var length = s.length;
for(var i=0; i<length; ++i){
if(state === OUT){
if(s[i]===' ' && s[i+1] === '"'){
i++; state = IN; chunk=""; continue;
}else {
chunk+=s[i];
}
}else if(state === IN ){
if(s[i]==='"' && s[i+1] === ' '){
i++; state = OUT; results.push(chunk); chunk="";
if(s[i+1] === '"'){
i++; state = IN; continue;
}
}else {
chunk+=s[i];
}
}
}
chunk.replace(/ $/,'');
if(chunk.length !== 0){
results.push(chunk);
}
return results;
}
['"a "b cd"', '"a b" cd"', '"a "b" "x"" cd"'].forEach(function(s){
var result = s + ' => ' + "[ '" +split(s).join("', '") + "' ]" + '</br>\n';
document.write(result);
});
&#13;
(对于inspect
javascript数组,可能有一种更好的方法,而不是我使用join
方法做的那些。)