否定正则表达式中的一对字符 Javascript
Negate a pair of characters in 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+()]+
那么,内容:非白的一切-space or ()
\)
和右括号。
|
交替
[^\s+()]+
常规参数
)
收盘价$1
然后是 \^
,然后是应用相同方法的第二个捕获组。
目前有 /([^\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+()]+
那么,内容:非白的一切-space or()
\)
和右括号。
|
交替[^\s+()]+
常规参数)
收盘价$1
然后是 \^
,然后是应用相同方法的第二个捕获组。