在一个字符串中用括号替换两个单独的正则表达式

Replacing two separate regular expressions with brackets within one string

本文关键字:替换 两个 正则表达式 单独 一个 字符串      更新时间:2023-09-26

我正试图用一个字符串替换带有两个分数的字符串"x={2x-21}/{x+12}+{x+3}/{x-5}"x=''frac{2x-21}{x+12}+''frac{x+3}{x-5}"(即从jqMath转换为LaTex)。

为了实现这一点,我编写了以下代码:

var initValue = "('{.*'}(?='/))'/('{.*'})";
var newValue = "''frac$1$2";
var re = new RegExp (initValue,"g");
var resultString = givenString.replace(re,newValue);
return resultString;

这段代码似乎适用于只有一个分数的字符串(例如"x={2x-21}/{x+12}"),但当我试图将其应用于有两个分数的示例时,结果是x=''frac{2x21}/{x+12}+{x+3}{x-5}。据我所知,正则表达式引擎捕获{2x-21}/{x+12}+{x+3}作为第一组,捕获{x-5}作为第二组。有什么方法可以用正则表达式得到我想要的结果吗?

同样的问题也适用于其他有几个非嵌套分隔符的模式,例如:"我喜欢咖啡(拿铁除外)和茶(包括薄荷茶)"。是否可以在括号中捕获这两个语句?

如果没有,我可能必须为此编写一个函数(这是可以的,但我想确保这是正确的方法)。

({[^}]+})'/({[^}]+})

试试这个。请参阅演示。由''frac$1$2修复。

http://regex101.com/r/tF5fT5/24