用javascript分割规则

用javascript分割规则,javascript,coffeescript,Javascript,Coffeescript,我希望能够按空格分割字符串,但如果空格在引号或括号之间,则不能 string = 'My str "hello world" (cool str though)'; 我希望它输出为: ['My', 'string', 'hello world', 'cool str though']; 我想有一个更简单的方法,但我写了一个小函数。 函数foo(){ var x='My str“hello world”(虽然很酷)'.split(''); var newx=[]; 对于(变量i=0,k=0;i

我希望能够按空格分割字符串,但如果空格在引号或括号之间,则不能

string = 'My str "hello world" (cool str though)';
我希望它输出为:

['My', 'string', 'hello world', 'cool str though'];

我想有一个更简单的方法,但我写了一个小函数。
函数foo(){
var x='My str“hello world”(虽然很酷)'.split('');
var newx=[];
对于(变量i=0,k=0;i-1){
newx[k]=x[i];
i++;
而(i-1)断裂;
i++;
}
继续;
}
else如果(x[i].indexOf(“(”)>-1){
newx[k]=x[i];
i++;
而(i-1)断裂;
i++;
}
继续;
}
else newx[k]=x[i];
}
警报(newx);
}

bar
这可能不是很花哨,但它确实起到了作用。我没有在大型集合上测试过它,但它适用于您的示例

var strng='My str“hello world”(尽管很酷)';
功能拆分(str、ignore1、ignore2){
var result=新数组();
var-pos=0;
var=false;
对于(i=0;i-1){
console.log('blocked:'+str.charAt(i));
阻塞=信号机2[信号机位置];
pos=i+1;
}否则如果(str.charAt(i)==“”){
console.log('found');
如果(i==pos+1 | | i==pos){
pos=pos+1;
}否则{
结果:push(str.substr(pos,i-pos));
pos=i+1;
}
}
}
}
如果(pos!=str.length){result.push(str.substr(pos,i-pos))};
返回结果;
}

console.log(拆分(strng,['”,“('],['”,“)”));
如果不使用转义符或嵌套引号和括号,可以匹配定义的集合:

var rx=/("[^"]+"|\([^(]+\)|[^ ]+)/g,

s='My str "hello world" (cool str though)';

s.match(rx).join('\n')

/*  returned value: (String)
My
str
"hello world"
(cool str though)
*/

@elclanrs我不知道怎么做。我希望使用带有regex参数的split方法。您可能希望通过查看您想要保留的内容来解决这个问题,而不是查看您想要分割的内容。@AlexWayne文本是动态的。。我真的想找到一种方法来实现这一点。但似乎不可能我并不是说使用单个regex是不可能的,但这跨越了正则表达式和解析器之间的界限。一些阅读: