对正则表达式Javascript中的两个字符取反

时间:2018-07-17 23:08:55

标签: javascript regex p5.js

当前有/([^\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)陷入混乱,但是我真正想做的是将*(配对为一个,因此括号是仅在带有括号之后才被否定。

是否有一种方法可以否定特定结果字符的出现?

1 个答案:

答案 0 :(得分:1)

我们可以完全避免使用高级正则表达式功能,并为函数参数添加一个简单的替代:

(\w+\([^\s+()]+\)|[^\s+()]+)\^(\w+\([^\s+()]+\)|[^\s,+()]+)

实际上,这不仅应该添加到第一个参数,因为第二个参数也可以是一个函数。

Demo

这里的基本思想是分别捕获函数和常规参数。

  • (捕获组1
  • (\w+\([^\s+()]+\)捕获类似abs(-4)的函数:
    • \w+寻找一个或多个字母([a-zA-Z0-9_]
    • (随后是字面的左括号
    • [^\s+()]+然后是内容:不是空格或()的所有内容
    • \)和右括号。
  • |交替
  • [^\s+()]+常规参数
  • )结束$ 1

然后是\^,然后是第二个采用相同方法的捕获组。