用Infuenced字符串替换Javascript中的所有子字符串

Fre*_*e R 0 javascript regex

我期待输入看起来像:"x ^ 3"并且想用一串"pow(x,3)"替换它.然而,整个输入可能看起来像"x ^ 3 + x ^ 2 + 4".在这里,我希望"^"运算符的每个实例代表转换为"pow()"子字符串.

这意味着我替换它的子字符串会受到它所发现的内容的影响,但如果我使用正则表达式,我需要"^"的任意一侧的通配符操作符.

有没有办法"存储"通配符在给定的实例中重新插入替换字符串中的内容?

即在x ^ 3中,3被存储并放回到pow(x,3)中

案例:

"x ^ 2" - >"pow(x,2)"

"x ^ 3 + x ^ 2" - >"pow(x,3)+ pow(x,2)"

"x ^ 4 + y ^ 19" - >"pow(x,4)+ pow(y,19)"

Dun*_*ker 5

这是我通常使用全开令牌器的问题,但是你可以使用捕获组来执行此操作:

const rewritePowers = str => str.replace(/([a-z])\^(\d+)/g, 'pow($1, $2)');
Run Code Online (Sandbox Code Playgroud)

为了打破这一点,这里是匹配的正则表达式:

/([a-z])\^(\d+)/g
Run Code Online (Sandbox Code Playgroud)

...其中([a-z])捕获基本变量,我们假设它是一个小写字母.括号将其捕获为一个组,这意味着它可以在以后"重播" $1.

然后\^匹配指数运算符,(我们使用反斜杠来逃避,因为^在正则表达式中有另一种含义).

然后将(\d+)指数捕获为第二组.所以替换字符串'pow($1, $2)'只是重放捕获的组.

请注意,我们需要/g正则表达式末尾的标志,否则这只会影响字符串中的第一个匹配,我们想要替换所有这些.