regex 使用正则表达式替换匹配中的特定字符组

lstz6jyr  于 2023-01-03  发布在  其他
关注(0)|答案(4)|浏览(174)

因此,我想匹配字符串bellow,这将是公式excel/电子表格类型的单元格,所有地址:\w +\d+,并仅更改其中的数字部分。I want以从原始字符串获取以下字符串:"= A2 + B2", "=A3+B3", "=A4+B4" ...
我试过:

const a = "=A1 + B1"
for (let i = 0; i < 100 ; i++) {
    const b = a.replace(/\w+$(\d+)/g, String(i + 1));
    console.log(b)
}

并给出了结果:

那么如果在grouping()parentesis之前不使用$:

const a = "=A1 + B1"
for (let i = 0; i < 100 ; i++) {
    const b = a.replace(/\w+(\d+)/g, String(i + 1));
    console.log(b)
}

我得到:

iqih9akk

iqih9akk1#

像这样?

const a = "=A1 + B1"
for (let i = 0; i < 10 ; i++) {
    const b = a.replace(/\b\w+\d+\b/g, function(match) {
        const num = match.match(/\d+/);
        const newNum = Number(num[0]) + i;
        return match.replace(/\d+/, newNum);
    });
    console.log(b);
}
3mpgtkmj

3mpgtkmj2#

从您的注解来看,您似乎想要100个结果,用1、2、3等替换行号。
如果是,请捕获列号并将其用于替换:

function updateFormula(formula, i) {
    const result = formula.replace(
        /\b([A-Z]+)\d+\b/g,
        (m, column) => column + i
    );
    return result;
}

const formula = "=A42 + B27";
for (let n = 1; n <= 100; ++n) {
    const result = updateFormula(formula, n);
    // ...
}

实时示例(仅执行20,因为代码段内控制台会在一段时间后删除行):
x一个一个一个一个x一个一个二个x

hrysbysz

hrysbysz3#

所以,所有的答案都很棒,但是我决定在代码中实现类似于JoanLaraGanauanswere的东西。

const a = "=A1 + B1"
for (let i = 0; i < 100 ; i++) {
    const num = String(i+1);
    const b = a.replace(/\w+\d+/g, function(match) {
        return match.replace(/\d+/g, num)
    });
    console.log(b);
}

其产生:

还是不知道为什么需要\b,是不是类似于()?

oprakyz7

oprakyz74#

只要把字母后面的数字匹配一下。

const a = "=A1 + B1";
for (let i = 0; i < 10; i++) {
  const b = a.replace(/(?<=[A-Z]+)\d+/g, i + 1);
  console.log(b);
}

或者,您可以使用split字符串来获取模式,这样就不必在每次迭代中都匹配它。

const a = "=A1 + B1"
const parts = a.split(/(?<=[A-Z]+)\d+/g);
for (let i = 0; i < 10; i++) {
  const b = parts.join(i + 1);
  console.log(b);
}

相关问题