我有示例表达式:
firstName =:'Mon';lastName =:'Arthur';:or{size >:'20';lastName ^:'H';:and{company |:'lon';:or{company |:'we'}}};lastName =:'aa';:and{length >:'33';:or{color =:'red'};width <:'2'};date <:'2012';:!{source =:'dictionary,locale'}
和正则表达式必须匹配:
因此正则表达式必须与以“:[anycharacters]{
”开头并以'}'
结尾的表达式匹配,并且该圆括号之间的表达式也可能包含可匹配的内部表达式。
我试着写点东西: https://regex101.com/r/gM3dR9/13 并且回报是:
;width <:'2'}
答案 0 :(得分:1)
我试图找出一个适合你的例子和你写的要求的解决方案,但我不确定,如果我完全得到它:
(?:;:)(\S+(?:{.*?}(?=[^}]*$|;[^}]*;:)))
这使用正向前瞻以确保正确捕获最后一个右括号(必须后跟字符串的末尾或另一个;:
)
如果可能,您的匹配是字符串的开头,因此;:
不能继续进行,您可以将部分(?:;:)
更改为(?:^|;:)
以下是Regex101的链接:https://regex101.com/r/dV8uI4/1
答案 1 :(得分:0)
试试这个regEx
(:or{.*?\};{1,})|(:and{.*\};)|(:!{.*?\};{0,})
我无法保证任何其他复杂的情况,但绝对是你提到的输出除了额外&#39 ;;&#39;
"firstName =:'Mon';lastName =:'Arthur';:or{size >:'20';lastName ^:'H';:and{company |:'lon';:or{company |:'we'}}};lastName =:'aa';:and{length >:'33';:or{color =:'red'};:width <:'2'};date <:'2012';:!{source =:'dictionary,locale'}".match(/(:or{.*?\};{1,})|(:and{.*\};)|(:!{.*?\};{0,})/g)
<强>输出强>
[":or{size >:'20';lastName ^:'H';:and{company |:'lon';:or{company |:'we'}}};", ":and{length >:'33';:or{color =:'red'};:width <:'2'};", ":!{source =:'dictionary,locale'}"]
格式化输出
[
":or{size >:'20';lastName ^:'H';:and{company |:'lon';:or{company |:'we'}}};",
":and{length >:'33';:or{color =:'red'};:width <:'2'};",
":!{source =:'dictionary,locale'}"
]