将Javascript中的所有子字符串替换为受影响的字符串

时间:2018-07-10 20:57:37

标签: 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)”

1 个答案:

答案 0 :(得分:5)

这是我通常使用全功能令牌生成器的一种问题,但是可以,您可以使用捕获组来执行此操作:

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

要对此进行细分,下面是匹配的正则表达式:

/([a-z])\^(\d+)/g

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

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

然后(\d+)将指数捕获为第二组。因此,替换字符串'pow($1, $2)'仅重播捕获的组。

请注意,我们需要在正则表达式的末尾添加/g标志,否则只会影响字符串中的第一个匹配项,因此我们希望替换所有的匹配项。