我有一个regexp用逗号分割字符串,忽略单引号或双引号之间的逗号,给出以下Ruby代码:
def separate params
params.split(?!\B('|")[^\"']*),(?![^\"']*('|")\B)
end
除了包含@
或#
预期行为的示例:
https://regex101.com/r/xB7rQ7/156
"\"search\", placeholder: \"Busca rápida: 1.4 8V, Flex, automático...\", id: \"search_terms\" "
出现意外行为的示例:
https://regex101.com/r/xB7rQ7/157
"\"search\", placeholder: \"Busca rápida: 1.4 8V, Flex, automático...\", id: \"#search_terms\" "
请注意,唯一的区别是“search_terms”之前的#
符号,但正则表达式仅在第一种情况下将placeholder
与id
分开。
任何人都可以对我的正则表达式有所了解,以便它能在预期的两种情况下都能正常工作吗?请注意,这是关于字符串拆分的特定情况,但其他问题未涉及。
答案 0 :(得分:0)
试试这个正则表达式:
,(?=(?:(?:[^"']*["']){2})*[^"']*$)
<强> Click for Demo 强>
<强>解释强>
,
- 匹配,
(?=(?:(?:[^"']*["']){2})*[^"']*$)
- 确认上述,
匹配必须遵循偶数"
或'
的正面预测
(?:(?:[^"']*["']){2})*
- 匹配"
或'
后跟"
或'
的任何字符的0次出现。最后的量词{2}
重复此子序列2次。最后量词*
重复整个子序列甚至次数(即0或2或4或6 ......次出现)。 如果"
和'
同时出现在字符串 [^"']*$
- 在找到偶数次数后,在行结束前不应出现"
或'