gpt4 book ai didi

javascript - 使用 RegExp 过滤字符串中的条件和组

转载 作者:行者123 更新时间:2023-12-03 11:40:20 24 4
gpt4 key购买 nike

我正在尝试实现某种动态过滤。

假设我有一个对象集合。每个对象都有相同的键但不同的值。

例如:

{
"state":"time out",
"displayState": "error"
}

我想按照从字符串中提取的模式对它们进行过滤和分类。

例如(完全没有意义,只是推断):

"displayState=error&(state!=aborted|(state=cancelled&state=timed out))"

我认为检测该字符串的最佳方法是通过正则表达式。能够捕获组、操作数和运算符

Here's what I have for now :

([^|&!()=<>]*)([=!<>]{1,2})([^|&!()=<>]*)(?:([|&])\(?([^|!&()=<>]*)([=!<>]{1,2})([^|&!()=<>]*)\)?)?

它是基本的和线性的,我对正则表达式的了解是有限的,所以它没有做我需要的事情。

基本上我正在尝试按 () 进行分组首先是 [.*][=><!][.*]

在同一进程中捕获组、操作数和运算符。

- 编辑-

感谢Aniket's answer我能够走得更远。

如上所述in these answers ,正则表达式不能进行递归,至少在 Javascript 中不能。

因此组由 () 分隔仅通过正则表达式无法隔离,需要一些逻辑。

我已查看Aniket's regexp清理渔获物

/([&|])?\(*(([a-zA-Z0-9 ]*)([!=<>]+)([a-zA-Z0-9 ]*))\)*/g

将会返回

0 : {
expression : displayState=error
type : undefined
operand1 : displayState
operator : =
operand2 : error
},
1 : {

expression : &(state!=aborted
type : &
operand1 : state
operator : !=
operand2 : aborted
},
2 : {
expression : |(state=cancelled
type : |
operand1 : state
operator : =
operand2 : cancelled
},
3 : {
expression : |state=timed out))
type : |
operand1 : state
operator : =
operand2 : timed out
}

我正在研究使用 javascript 隔离组,并拥有完整的 jsFiddle 工作流程。

一旦它正常工作,我将发布我的解决方案。

最佳答案

这是我能想到的:

([\&\|\(]+)?([a-zA-Z0-9 ]*)([!=<>]+)([a-zA-Z0-9 ]*)

http://www.regexr.com/39mfq

这将为您提供组、操作数和运算符。这里需要注意的是,它只能获取第一个左括号,因此您可以在检查构造的组时自己添加右括号。

假设我有这个字符串

"displayState=error&(state!=aborted|(state=cancelled&state=timed out))"

根据上面给出的正则表达式,我将得到以下组:

displayState
=
error

&(
state
!=
aborted

|(
state
=
cancelled

&
state
=
timed out

计算这个相当简单,因为您可以从检查并打开 ( 开始,如果找到一个,那么您就知道它前面的表达式将包含在其中。

我知道这不是一个很好的解决方案,但它可能会有所帮助。

关于javascript - 使用 RegExp 过滤字符串中的条件和组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26310322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com