在引号之外选择逗号的Regex

我不太确定这是否可能,所以我求助于你。

我想找一个正则表达式,将挑选所有逗号以外的引号集。

例如:

'foo' => 'bar','foofoo' => 'bar,bar'

这将在第1行之后选择单个逗号。'bar',

我不关心单引号还是双引号。

有人有什么想法吗?我觉得这是有可能的,但我的判断力太弱了。

在引号之外选择逗号的Regex

芜湖不芜
浏览 639回答 3
3回答

拉丁的传说

下面的regexes将匹配在双引号之外的所有逗号,,(?=(?:[^"]*"[^"]*")*[^"]*$)演示或(仅限PCRE)"[^"]*"(*SKIP)(*F)|,"[^"]*"匹配所有双引号块。也就是说,在这个buz,"bar,foo"输入,此正则表达式将匹配"bar,foo"只有。下面是(*SKIP)(*F)使比赛失败。然后,它移动到旁边的模式|符号,并尝试匹配剩余字符串中的字符。也就是说,在我们的产出中,模式旁边|将只匹配后面的逗号。buz..注意,这与双引号中的逗号不匹配,因为我们已经将双引号部分跳过了。演示下面的regex将匹配双引号中的所有逗号,,(?!(?:[^"]*"[^"]*")*[^"]*$)演示

紫衣仙女

虽然可以使用regex(我和下一个人一样喜欢滥用regexes)来破解它,但您迟早会遇到麻烦,尝试在没有更高级解析器的情况下处理子字符串。陷入困境的可能方法包括混合引号和转义引号。此函数将在逗号上拆分一个字符串,但不是在单引号或双引号内的逗号。它可以很容易地用额外的字符作为引号进行扩展(虽然像“这样的字符对还需要几行代码),甚至可以告诉您,如果您忘记关闭数据中的引号:function&nbsp;splitNotStrings(str){ &nbsp;&nbsp;var&nbsp;parse=[],&nbsp;inString=false,&nbsp;escape=0,&nbsp;end=0 &nbsp;&nbsp;for(var&nbsp;i=0,&nbsp;c;&nbsp;c=str[i];&nbsp;i++){&nbsp;//&nbsp;looping&nbsp;over&nbsp;the&nbsp;characters&nbsp;in&nbsp;str &nbsp;&nbsp;&nbsp;&nbsp;if(c==='\\'){&nbsp;escape^=1;&nbsp;continue}&nbsp;//&nbsp;1&nbsp;when&nbsp;odd&nbsp;number&nbsp;of&nbsp;consecutive&nbsp;\ &nbsp;&nbsp;&nbsp;&nbsp;if(c===','){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!inString){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parse.push(str.slice(end,&nbsp;i)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end=i+1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(splitNotStrings.quotes.indexOf(c)>-1&nbsp;&&&nbsp;!escape){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(c===inString)&nbsp;inString=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(!inString)&nbsp;inString=c&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;escape=0 &nbsp;&nbsp;} &nbsp;&nbsp;//&nbsp;now&nbsp;we&nbsp;finished&nbsp;parsing,&nbsp;strings&nbsp;should&nbsp;be&nbsp;closed &nbsp;&nbsp;if(inString)&nbsp;throw&nbsp;SyntaxError('expected&nbsp;matching&nbsp;'+inString) &nbsp;&nbsp;if(end<i)&nbsp;parse.push(str.slice(end,&nbsp;i)) &nbsp;&nbsp;return&nbsp;parse}splitNotStrings.quotes="'\""&nbsp;//&nbsp;add&nbsp;other&nbsp;(symmetrical)&nbsp;quotes&nbsp;here
打开App,查看更多内容
随时随地看视频慕课网APP