我希望输入看起来像:“ 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)”
答案 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
标志,否则只会影响字符串中的第一个匹配项,因此我们希望替换所有的匹配项。