我有以下字符串:

TestInputs.abc_def.alpha=abc^ORtestVars.var23.nameISEMPTY^testInputs.alpha_bravo.more.otheroneCONTAINSsomething^testVars.anotherone!=abc^testVars.mYVar!=abc

我需要它来匹配

testInputs.abc_def.alpha. testVars.var23.name个. 一百零二 testVars.anotherone testVars.mYVar

我可以匹配所有匹配项,但问题是它还匹配一些不应该匹配的运算符:

ISEMPT 包含

(还有许多其他公司,如IN、Not IN等)

我有一个数组,我可以加入创建一个交替,但问题是保持匹配,没有删除的子字符串.就目前而言,

testVars.var23.name

我最终与

testVars.var23.nameISEMPTY

同样,我匹配testInputs.alpha_bravo.more.otheroneCONTAINS

目前的规则是:

  • 匹配可以从testInputs.testVars.开始
  • 任何字母数字,不区分大小写,以及下划线(_)和句点(.)
  • 测试输入或测试变量后的子字符串可以是任意长度
  • 一个字符串中可以有多个匹配项
  • 匹配的形式也可以是{{var}},例如,{{testInputs.myinput}}=ABC或{{testVars.my_var}}ISEMPTY,但为了更容易阅读,我没有对上面的内容进行说明.

到目前为止,我已经try 了以下几种方法:

(({{)?(?:testInputs\.|testVars\.)[a-zA-Z0-9_\.]+(}})?)

并try 了几种不同的前视/后视

(?!CONTAINS|ISEMPTY)

但未能成功排除无效的子字符串,同时仍与我正在寻找的匹配部分匹配.

推荐答案

您可以将每个字符与负lookhead模式匹配,以排除已知的关键字(随时添加更多):

(?:testInputs|testVars)\.(?:[\w.](?!ISEMPTY|CONTAINS|OR|IN|[^\w.]))*\w

演示:https://regex101.com/r/L14Te5/3

Javascript相关问答推荐

从连接字符串创建客户端时,NodeJS连接到CosmosDB失败

具有相同参数的JS类

使用json文件字符串来enum显示类型字符串无法按照计算的enum成员值的要求分配给类型号

如何为GrapesJS模板编辑器创建自定义撤销/重复按钮?

JQuery. show()工作,但. hide()不工作

从WooCommerce Checkout Country字段重新排序国家,保持国家同步

我的角模板订阅后不刷新'

使用Promise.All并发解决时,每个promise 的线性时间增加?

如何在Angular17 APP中全局设置AXIOS

用JS从平面文件构建树形 struct 的JSON

用于在路径之间移动图像的查询

DOM不自动更新,尽管运行倒计时TS,JS

为什么JPG图像不能在VITE中导入以进行react ?

元素字符串长度html

将异步回调转换为异步生成器模式

在渲染turbo流之后滚动到元素

如何根据查询结果重新排列日期

我们是否可以在reactjs中创建多个同名的路由

JSON Web令牌(JWT)错误:RSA密钥对的签名无效

MUI-TABLE:MUI表组件中交替行的不同 colored颜色 不起作用