2014-06-25 54 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

相關問題