Regex更改,带有不同前缀和后缀表达式的共享子表达式
Regex alteration with shared sub expression with different prefix and suffix expressions
我有下面的正则表达式,它有3个替换项(请参见下面的整个正则表达式),每个正则表达式都有自己的前缀和后缀字符。我觉得这重复得太多了,如果可能的话,我想简化一下。我正在匹配格式不正确的JSON字符串中的值,以将没有键的值替换为索引键。
每个替换都应该将前缀和后缀对与子表达式相匹配。我现在有三双,但可能会改变。如果我有更多的对,那么整个正则表达式将变成一场噩梦,如果我需要修改重复的子表达式,我就会明白。
问题
如何缩短下面的整个正则表达式,而不需要为列出的后缀和前缀对重复子表达式 子表达式,在每次交替中重复 前缀/后缀对 整Regex 测试字符串 实际示例 请将答案限制在regex替换而不是JSON验证技术上,因为我正试图更好地理解regex,这只是我使用的示例。("(?:[^''"]+|''.)*")
/'{("(?:[^''"]+|''.)*")(?=,)|,("(?:[^''"]+|''.)*")(?=,)|,("(?:[^''"]+|''.)*")(?='})/g
{"trailer":"","pallet":"A","date":"11-Dec-15","c","z","a"}
{"trailer":"","pallet":"A","a","date":"11-Dec-15"}
{"a","trailer":"","pallet":"A","date":"11-Dec-15"}
{"a","trailer":"","pallet":"A","date":"11-Dec-15","z'""}
{"trailer":"","pallet":"A","11-Dec-15"}
{"trailer'"","pallet":"A","11-Dec'"-15","z'""}
虽然正则表达式可以简化为:
/'{("(?:[^''"]+|''.)*")(?=,)|,("(?:[^''"]+|''.)*")(?=,)|,("(?:[^''"]+|''.)*")(?='})/g
收件人:
/{("(?:[^''"]+|''.)*")(?=,)|,("(?:[^''"]+|''.)*")(?=,)|,("(?:[^''"]+|''.)*")(?=})/g
删除{
和}
的转义,因为JavaScript的正则表达式引擎不需要它。
这是不可能在JavaScript中删除显式重复模式("(?:[^''"]+|''.)*")
的。
JavaScript不支持正则表达式引擎支持的所有基于PCRE(PHP、C++、Perl等)的正则表达式功能。
例如,在PHP/C++中,您可以这样做:
{("(?:[^''"]+|''.)*")(?=,)|,((?1))(?=,)|,((?1))(?=})
对于Perl5.22,您需要再次转义{
,所以它看起来像这样:
m/'{("(?:[^''"]+|''.)*")(?=,)|,((?1))(?=,)|,((?1))(?=})/g
该(?1)
是一个子程序调用,用于匹配捕获组1
内的正则表达式,在本例中,该捕获组为("(?:[^''"]+|''.)*")
。
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- ng init中的表达式无法使用ng repeat
- 正则表达式在字符串中找到base64
- 我的AngularJS表达式没有'不起作用
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 表达式引擎扩展开发-向呈现的条目添加自定义javascript
- 使用正则表达式评估电子邮件地址时出现性能问题
- 如何在HTML输入字段中添加不可删除的后缀
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- Regex更改,带有不同前缀和后缀表达式的共享子表达式
- 匹配域后缀的正则表达式
- 未捕获的ReferenceError:后缀操作中左侧表达式无效
- 为什么这些JavaScript正则表达式捕获圆括号而不是单词后面的后缀