编写正则表达式:匹配指定前缀且排除操作符的目标字符串
正则匹配解决方案
问题场景
给定字符串:
testInputs.abc_def.alpha=abc^ORtestVars.var23.nameISEMPTY^testInputs.alpha_bravo.more.otheroneCONTAINSsomething^testVars.anotherone!=abc^testVars.mYVar!=abc
需要精准匹配以下变量,同时支持{{var}}格式的变量,且不能将ISEMPTY、CONTAINS等操作符包含进匹配结果:
testInputs.abc_def.alphatestVars.var23.nametestInputs.alpha_bravo.more.otheronetestVars.anotheronetestVars.mYVar
解决方案正则
({{)?(testInputs\.|testVars\.)[a-zA-Z0-9_\.]*(?=(?:}})?(?:=|ISEMPTY|CONTAINS|!=|$|\^))(}})?
正则说明
({{)?:可选匹配变量开头的双大括号(testInputs\.|testVars\.):匹配固定前缀,点号做转义处理[a-zA-Z0-9_\.]*:匹配变量主体部分,允许字母、数字、下划线和点号,长度不限(?=(?:}})?(?:=|ISEMPTY|CONTAINS|!=|$|\^)):正向预查断言,确保匹配的变量后面紧跟的是可选的闭合双大括号}},然后是操作符(=、ISEMPTY、CONTAINS、!=)、字符串结尾$或者分隔符^——这是核心逻辑,用来截断变量和后续操作符的边界,避免误匹配操作符内容(}})?:可选匹配变量结尾的双大括号
验证示例
- 对于
{{testInputs.myinput}}=abc,会匹配到{{testInputs.myinput}} - 对于
{{testVars.my_var}}ISEMPTY,会匹配到{{testVars.my_var}}
内容的提问来源于stack exchange,提问作者Seth Duncan
相关产品推荐
相关产品推荐

