2014-06-25 55 views
0

我想写一个正则表达式来将字符串拆分为数组。它必须使用空格或逗号的分隔符进行分隔,并忽略引用短语内部的分隔符(使用单引号或双引号)。由多个分隔符分割字符串并忽略引号中的分隔符javascript

到目前为止,我可以用空格和逗号分隔它,但我无法让它在引号和我迷失之间忽略它们。

var pattern = /\b\w+[^"', ]+(?!'")/g, 
    text = "Hello world \"Boston Red Sox\" hello, world, \'boston, red sox\', \'beached whale\', pickup sticks", 
    output = text.match(pattern); 

电流输出:

["Hello", "world", "Boston", "Red", "Sox", "hello", "world", "boston", "red", "sox", "beached", "whale", "pickup", "sticks"] 

所需的输出:

["Hello", "world", "Boston Red Sox", "hello", "world", "boston, red sox", "beached whale", "pickup", "sticks"] 

任何帮助将是巨大的!

+1

正则表达式本身并不是为这个伟大的工具。你不是[使用库](http://stackoverflow.com/q/1293147/139010),也不使用[JS已经支持的非垃圾格式?](http://json.org /) –

+0

这实际上是一个面试问题。他们希望我谈论为什么这是一个可怕的方式来输入一个字符串列表,我会在解决问题的方式下以最好的方式呈现字符串。 – Trendy

+0

[我怎样才能用Javascript解析CSV字符串,其中包含数据中的逗号?](https://stackoverflow.com/questions/8493195/how-can-i-parse-a-csv-string-with -javascript-which-contains-comma-in-data) – LWC

回答

5

只需使用|

var regex = /"([^"]*)"|'([^']*)'|[^\s,]+/g; 
 
    var text = "Hello world \"Boston Red Sox\" hello, world, \'boston, red sox\', \'beached whale\', pickup sticks"; 
 
    var output = []; 
 
    var m; 
 
    while ((m = regex.exec(text)) !== null) 
 
    { 
 
     output.push(m[1] || m[2] || m[0]); 
 
    } 
 
    console.log(output);

fiddle

+1

@RobG,谢谢你的建议。它已被纠正。 – Fabricator

+0

@Fabricator感谢您的帮助! – Trendy

相关问题