Разделительные разделители, такие как кавычки (или парсеры, скобки и т. Д., Но особенно кавычки для переменного тока ouple причин) лучше всего делать с синтаксическим анализатором CFG, а не с регулярными выражениями. Но это довольно просто и сделано в O (n) времени, которое совпадает с регулярными выражениями, и лучше, чем нерегулярные выражения, которые вы могли бы использовать для такого рода вещей (REs являются родными, хотя).
function parseStrings(str){
var parse=[], inString=false, escape=0, end=0
for(var c=0; c<str.length; c++) switch(str[c]){
case '\\': escape^=1; break
case ',': if(!inString){
parse.push(str.slice(end, c))
end=c+1
}
escape=0
break
case '"': if(!escape) inString=!inString
default: escape=0 // fallthrough from previous case
}
if(inString) throw SyntaxError('expected matching " at the end of the string')
if(end<c) parse.push(str.slice(end, c))
return parse
}
Это может быть расширено, чтобы разобрать одиночные кавычки строки и другие разделители тоже (вы должны построить стек для не кавычек). Я отправил модифицированную версию, которая обрабатывает как одиночные и двойные кавычки в Regex to pick commas outside of quotes
Я правильно считать что вы хотите игнорировать запятые, исходя из того, находятся ли они внутри строк с кавычками? – Touffy
Да, что я ищу – Bharat
Да, это дубликат этого вопроса, но, к сожалению, ответ там не очень хорош, так как он игнорирует возможность экранированных кавычек ('' \ '' ') – Touffy