javascript - 否定 RegEx Javascript 中的一对字符
问题描述
目前必须/([^\s\+\(]+)\^([^\s\,\+\)]+)/g
转换x^y
为pow(x,y)
.
效劳于:
y = x
y = x^2
y = x^2 + y^2
y = 5*(x^2 + y^2)
y = (x^2 + y^2)
y = pow(x^2+y^2, 2)
但是我希望能够做这样的事情:
y = abs(x)^2 --> y = pow(abs(x), 2)
我目前\(
在第一个否定的捕获组中停止5*(x^2)
被搞砸,但是我真正想做的是*(
作为一对否定,所以只有在括号前面时括号才会被否定。
有没有办法否定连续字符的特定出现?
解决方案
我们可以完全避免高级正则表达式功能,并为函数参数添加一个简单的替换:
(\w+\([^\s+()]+\)|[^\s+()]+)\^(\w+\([^\s+()]+\)|[^\s,+()]+)
实际上,这不仅应该添加到第一个参数,因为第二个参数也可以是一个函数。
这里的基本思想是分别捕获函数和常规参数。
(
捕获组 1(\w+\([^\s+()]+\)
捕获如下函数abs(-4)
:\w+
寻找一个或多个字母数字字母 ([a-zA-Z0-9_]
)- ( 后面是一个文字左括号
[^\s+()]+
然后,内容:不是空白的所有内容或()
\)
和一个右括号。
|
交替[^\s+()]+
常规参数)
收盘 $1
然后\^
是应用相同方法的第二个捕获组。
推荐阅读
- html - Sphinx 阅读文档 - 在文本中仅使用图标
- php - 有人可以澄清根相对 URL 和 htaccess 的问题吗
- python - Python:在 Pandas 数据框中组合布尔列
- c# - 如何对适配器类进行单元测试?
- vba - 如何更改邮件失败项目的“发件人”值?
- python - 用于 SVM 模型而不是 DataFrame 的 Numpy 数组
- java - 从安装在 AWS 服务器中的 Oracle 数据库检索数据较慢
- sql - 无法对 SQL 语句进行分组和计算返回率
- gdb - 为什么我在我的 Ubuntu 中看到 RCX 寄存器,但我正在观看的教程显示了一个名为 ECX 的寄存器?
- tensorflow - 如何使用功能来评估未用于训练模型的自定义 TensorFlow 指标