javascript/regex忽略双引号中的分号

javascript/regex忽略双引号中的分号,javascript,regex,split,Javascript,Regex,Split,我在这一点上被难住了-我有一个几乎是分号分隔的字符串,它应该是这样的: 一,;二,;三"四,五,六",;七 我想使用javascript中的正则表达式将其拆分为如下数组(例如,忽略双引号中的分号): 一、二、三、四、五、六、七 我尝试过调整已知的CSV函数,但它们似乎能够适应第三个元素(“三”四;五;六“) 这似乎是一个正则表达式类型的问题,但如果存在一个使用比正则表达式更多的解决方案,我当然感兴趣 更新:我还应该注意,在带引号的字符串中,分号之前或之后可能有空格。我已经更新了示例以反映这一点。

我在这一点上被难住了-我有一个几乎是分号分隔的字符串,它应该是这样的:

一,;二,;三"四,五,六",;七

我想使用javascript中的正则表达式将其拆分为如下数组(例如,忽略双引号中的分号):

一、二、三、四、五、六、七

我尝试过调整已知的CSV函数,但它们似乎能够适应第三个元素(“三”四;五;六“)

这似乎是一个正则表达式类型的问题,但如果存在一个使用比正则表达式更多的解决方案,我当然感兴趣


更新:我还应该注意,在带引号的字符串中,分号之前或之后可能有空格。我已经更新了示例以反映这一点。

假设您不允许在引号内使用转义引号(例如,
“这在”
内有\“转义引号\”),那么这应该可以工作:

var rx = /(?!;|$)[^;"]*(("[^"]*")[^;"]*)*/g;
var str = 'one; two; three "four;five;six"; seven';
var res = str.match(rx)
// res = ['one', ' two', ' three "four;five;six"', ' seven']
请注意,您需要在正则表达式的开头使用
(?!;|$)
来防止它匹配空字符串,否则
match
方法会出于某种原因匹配每个分号前面的空字符串

更新:

我认为这个正则表达式也应该使用转义引号(尽管我希望得到正确性方面的反馈)。我还在负先行模式中添加了额外的
\s
,以去除前面分号后面的空白

/(?!\s|;|$)[^;"]*("(\\.|[^\\"])*"[^;"]*)*/g

这将在分号之前和之后去除空格:

'one; two; three "four;five;six"; seven'.match(/(?!;| |$)([^";]*"[^"]*")*([^";]*[^ ";])?/g)

['one', 'two', 'three";four;five;six"', 'seven']

'one ; two"; three ; "four" ; five ; "six ; seven'.match(/(?!;| |$)([^";]*"[^"]*")*([^";]*[^ ";])?/g)

['one', 'two" ; three ; "four" ; five ; "six', 'seven']

不过,它不会尝试处理转义引号。

这太棒了!我怎样才能让这个与“and”?var str='one;two;three“four;五个;六个“七”;var str2=“一;二,;三"四",;五个;六",;七“@marknadal-看起来你想让它也适用于单引号字符串。在这种情况下,试试这个:完美地工作,我见过的最令人印象深刻的正则表达式之一。谢谢。