tl; dr
我需要一些帮助,使得将正则态度匹配,这些正则符合并排与周围无限的空白以及它们之间并排的任何逗号相匹配。逗号及其周围的白色空间不能在匹配的单引号或双引号范围内。然后,我需要从这些逗号周围捕获非空格值,并计算其中有多少个逗号。
从逗号周围捕获的值将在最终数组中成为其自己的值,而所计数的逗号将成为添加到最终数组的零值。
问题的解释:
这是一个非常复杂的问题,因此任何帮助都将受到极大的赞赏。我将功能添加到我已经使用了一段时间的库中。我有一个包含数组的字符串
"['d,og,f:asdf,:hello,",,",,alsee',,,'ho,la', "-123,4,5.3", true, :good, false,,, "gr'''true,','ee"n", ":::testme", true]"
我只想在选择逗号周围分开此字符串,以便我有一个包含以下值的数组
'd,og,f:asdf,:hello,",,",,alsee'
nil
nil
'ho,la'
"-123,4,5.3"
true
:good
false
nil
nil
"gr'''true,','ee"n"
":::testme"
true
然后,nil
值来自任何字符串中未包含的并排逗号。我写下了以下等级以拆分上面的字符串(我已经摆脱了开始和结束括号):
/(?<=(?:['"]|false|true|^|,)),(?=(?:s*(?:(?::[w]+)|(?:(?::?(?:"[sS]*")|(?:'[sS]*'))|(?:false|true)))s*(?:,|$)))/
这将字符串拆分,因此我得到了这些值:
(0) "'d,og,f:asdf,:hello,",,",,alsee',,"
(1) "'ho,la'"
(2) " "-123,4,5.3""
(3) " true"
(4) " :good, false,,"
(5) " "gr'''true,','ee"n""
(6) " ":::testme""
(7) " true"
所有的值都是字符串,可以从周围的双引号上看到。他们不会那样最终。真假将转换为布尔值。被内部引号包围的值最终将作为字符串。然后,:
之前的值最终将作为符号。
索引0
和4
的值存在问题。索引0
应该是这样:
(0.0) "'d,og,f:asdf,:hello,",,",,alsee'"
(0.1) nil
(0.2) nil
您可以看到,最后的两个逗号已经消失了。它们已成为您在上面看到的两个nil
值。然后,字符串从第一个引用开始,并在最后一个单一的报价中结束,表示数组中的该值是字符串。
然后索引4
(" :good, false,,"
)应该是:
(4.0) " :good"
(4.1) " false"
(4.2) nil
(4.3) nil
末尾的两个逗号已成为nil
。那么" false"
是它自己的值,后来将转换为布尔值,而" :good"
也是它自己的值,后来将转换为符号。
为了解决索引4
的问题,我的所有值都通过第二个正则运行。在这里是:
/^(s*:(?:(?:[w]+|"[sS]+"|'[sS]+')s*)),([sS]*)$/
而不是拆分这个,而是得到捕获组。它最终在索引4
上返回该数组的值:
(4.0) " :good"
(4.1) " false,,"
这是我想要的,除了一个问题。索引4.1
(" false,,"
)的值具有两个尾随逗号,该逗号应为nil
值。
我需要一些帮助,使得将正则态度匹配,这些正则符合并排与周围无限的空白以及它们之间并排的任何逗号相匹配。逗号及其周围的白色空间不能在匹配的单引号或双引号范围内。然后,我需要从这些逗号周围捕获非空格值,并计算其中有多少个逗号。
从逗号周围捕获的值将在最终数组中成为其自己的值,而所计数的逗号将成为添加到最终数组的零值。
" ['d,og,f:asdf,:hello,,, ",alsee',,'ho,la',"-123,4,5.3",是的:好,错误,","gr ''我数4个字符串。3在双引号中,最后一个引号?您说这被您的regx分解为较小的字符串。但是4个字符串之外的角色呢?抱歉,这看起来有些混乱。尝试将其全部放在此处的文档字符串中,然后通过regx将其分解。
我终于自己弄清楚了。如果您查看上述问题的描述,您可以看到其与众的适合。
/^(([s]*,)*)[s]*((?::[w]+)|(?::?(?:"[sS]*")|(?:'[sS]*')|false|true))?(([s]*,)*)$/