2013-05-20 4 views
1

Мне нужно разбить строку, разделенную запятой, и сохранить результат в массиве.Как разбить строку, экранируя текст, который находится в двойных кавычках

следующие работы большие

arr=inputString.split(",") 

для этого примера

John, Doe  =>arr[0]="John"  arr[1]="Doe" 

Но это не в состоянии получить следующие ожидаемого результата

"John, Doe", Dan =>arr[0]="John, Doe" arr[1]="Dan" 
John, "Doe, Dan" =>arr[0]="John"  arr[1]="Doe, Dan" 

После регулярных выражений тоже не помогло

 var regExpPatternForDoubleQuotes="\"([^\"]*)\""; 
     arr=inputString.match(regExpPatternForDoubleQuotes); 
     console.log("txt=>"+arr) 

Строка может содержать более двух двойных кавычек.

Я стараюсь выше в JavaScript.

+0

Спасибо за ссылку. Не знал, что об этом уже ответили. Но связанный ответ очень многословный и хороший. Ответ здесь быстрый и короткий. Я предпочитаю последнее в моем случае. – Watt

ответ

2

Это работает:

var re = /[ ,]*"([^"]+)"|([^,]+)/g; 
var match; 
var str = 'John, "Doe, Dan"'; 
while (match = re.exec(str)) { 
    console.log(match[1] || match[2]); 
} 

Как это работает:

/ 
    [ ,]*  # The regex first skips whitespaces and commas 
    "([^"]+)" # Then tries to match a double-quoted string 
    |([^,]+) # Then a non quoted string 
/g   # With the "g" flag, re.exec will start matching where it has 
       # stopped last time 

Попробуйте здесь: http://jsfiddle.net/Q5wvY/1/

+0

+1. Это то, что мне нужно. – Watt

0

Попробуйте использовать этот шаблон с помощью метода Exec:

/(?:"[^"]*"|[^,]+)+/g 
Смежные вопросы