首页 > 解决方案 > 用于仅匹配和替换 excel 公式字符串中的列号数字的正则表达式

问题描述

我需要从 excel 公式字符串中替换 columnNumber 数字。

我尝试编写一个正则表达式(/[A-Z]\d+/g)来从公式字符串中获取带有数字的 columnNumber,这似乎无法正常工作,因为它只是检测 columnNumber (E2~D2) 而不是仅替换该 columnNumber-digit 的数字,它正在替换整个 columnNumber。

var formula = "=IF(E2<(D2*0.004),100,IF((100-(((E2-(D2*0.004))/(D2*0.004))*100))<0,0,(100-(((E2-(D2*0.004))/(D2*0.004))*100))))";
    var regex = /[A-Z]\d+/g;

    for(var i=2; i<=3; i++)
    console.log(formula.replace(regex,i)

我需要这个

/** 
=IF(E2<(D2*0.004),100,IF((100-(((E2-(D2*0.004))/(D2*0.004))*100))<0,0,(100-(((E2-(D2*0.004))/(D2*0.004))*100))))

=IF(E3<(D3*0.004),100,IF((100-(((E3-(D3*0.004))/(D3*0.004))*100))<0,0,(100-(((E3-(D3*0.004))/(D3*0.004))*100))))
**/

但是得到这个

/** 
=IF(2<(2*0.004),100,IF((100-(((2-(2*0.004))/(2*0.004))*100))<0,0,(100-(((2-(2*0.004))/(2*0.004))*100))))

=IF(3<(3*0.004),100,IF((100-(((3-(3*0.004))/(3*0.004))*100))<0,0,(100-(((3-(3*0.004))/(3*0.004))*100))))
**/

标签: javascriptregexstringreplace

解决方案


我不太确定,是否要替换 [AZ] 之后的数字。如果是这种情况,这可能会帮助您这样做:

var formula = "=IF(E2<(D2*0.004),100,IF((100-(((E2-(D2*0.004))/(D2*0.004))*100))<0,0,(100-(((E2-(D2*0.004))/(D2*0.004))*100))))";
    var regex = /([A-Z])\d+/g;

    for(var i=2; i<=3; i++){
        console.log(formula.replace(regex,'\$1'+i));
    }        

正则表达式演示

此图显示了表达式的工作方式:

在此处输入图像描述


推荐阅读