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

标签 javascript regex string

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

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

例如:

{
    "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/

相关文章:

javascript - 使用 .find() 从数组中删除元素

javascript - 解析错误: Unexpected token = ReactJs

regex - 使用 sed 替换列字段分隔符

python - 如何在Python中删除重复的短语?

c - 为什么密码中的 strcmp() 不起作用?

javascript - 使用 React useState 钩子(Hook)向循环内的对象添加键值对

javascript - 动画()不连续工作

javascript - 正则表达式模式太长——需要在 JavaScript 中分割而不使用转义字符

java - 是否可以使从数据库中获取的字符串成为全局字符串?

string - 如何显示字符串中的每个单词?