首页 > 解决方案 > 如何在某个字符之前和之后应用正则表达式

问题描述

我想将正则表达式代码应用于特定字符之前和/或之后的字符串部分,并且该字符必须在括号之外。

更具体地说,我正在编写一个显示逻辑计算的网站(在 React.JS 中),我想删除主要逻辑运算符之前和之后的第一个和最后一个括号。例如,在字符串中:

"((p∧r)∧(q∧r))∧(p∧q)"

我只想得到:"(p∧r)∧(q∧r)""p∧q"

这意味着我想获取所有"∧"括号之前和之后的所有字符,并且我想删除两个字符串的第一个左括号和最后一个右括号。(例如,结果可能是一个包含前后部分的数组。)我已经能够使用以下代码删除第一个括号:

str.replace(/(\()(.*)(\))/, "$2");

但是该代码现在应用于整个字符串。

那么如何将此代码应用于唯一"∧"外括号之前和之后的两个部分?如果可能的话,我更喜欢只使用正则表达式的代码,但 JavaScript 部分可以。提前谢谢。

标签: javascriptregexparentheses

解决方案


您将无法在纯正则表达式中执行此操作,这类似于尝试使用正则表达式解析 HTML。简而言之,这是不可能的(并且已经以各种可能的方式多次回答)

所以你需要javascript。在 javascript 中执行此操作并不简单,因为您需要解析整个字符串以找到“^-who-are-not-in-parenthese”。

我会首先检查是否有一些用于数学运算的解析器或其他已经存在并且可以根据您的需要进行调整的解析器。

如果你没有找到东西,你将需要自己创造。

你可以通过一个字符一个字符的循环来完成它,有一个括号缩进级别的计数器,以及一个树状数据结构作为输出。

您还可以使用正则表达式查找最后一级缩进并创建自下而上的解析器。您找到所有最内层的括号组,保存它们,并用特殊的标识符字符替换它们。然后,您可以重做该操作以找到现在最里面的括号组,检查其中是否有特殊字符并将它们放在树中(作为由字符标识的元素的父级。)

一旦你有了你的树结构(以某种方式),根和第一级元素应该是你想要的。


推荐阅读