regex 修改大字符串中的数字

1szpjjfi  于 2023-01-10  发布在  其他
关注(0)|答案(2)|浏览(100)

我试图修改一个以#开头的大字符串中的某些数字。
例如,我有一个字符串:

var text = "#41 = AXIS2_PLACEMENT_3D ( 'NONE', #3200, #1543, #6232 ) ;
#42 = EDGE_CURVE ( 'NONE', #180, #933, #1234, .T. ) ;"

然后,我想添加一个固定的数字,以每一个数字后的“#”,例如,添加100,以获得这个:

text = "#141 = AXIS2_PLACEMENT_3D ( 'NONE', #3300, #1643, #6332 ) ;
#142 = EDGE_CURVE ( 'NONE', #280, #1033, #1334, .T. ) ;"

我已经用regex做到了这一步:

const offset = 100;
const matchingExpression = /\#(\d+)/ig;
text = text.replaceAll(matchingExpression, "#" + //old value + offset);

我现在可以替换所有以“#"开头的数字。但是我如何得到旧的值呢?
我不是很熟悉正则表达式,不知道这种方法是否可行。希望你能帮助我。
谢谢

qvsjd97n

qvsjd97n1#

可以像这样使用String.replace

const offset = 100;
const matchingExpression = /\#(\d+)/ig;

text = text.replace(matchingExpression, function(match) {
    return "#" + (parseInt(match.slice(1)) + offset)
});
8i9zcol2

8i9zcol22#

使用String.prototype.replace方法的第二个参数(函数回调):

const add100 = (text) => text.replace(/#(\d+)/gm, (m, n) => `#${+n + 100}`);

const text = `#41 = AXIS2_PLACEMENT_3D ( 'NONE', #3200, #1543, #6232 ) ;
#42 = EDGE_CURVE ( 'NONE', #180, #933, #1234, .T. ) ;`;

console.log(add100(text));

相关问题