javascript正则表达式向后替换字符

时间:2018-12-06 22:22:25

标签: javascript regex lookbehind

我有一长串看起来像这样的代码

hs2^Ȁ_^HELLO_x_fs2^Ȁ_^WORLD_x_gn3^Ȁ_^HOME_x_gs3^Ȁ…

我需要替换。十六进制字符会反复使用Ȁ,并且前面总是有一个^。我需要更改每个^Ȁ之前出现的数字,将这些数字减1。这样最终结果将是……

hs1^Ȁ_^HELLO_x_fs1^Ȁ_^WORLD_x_gn2^Ȁ_^HOME_x_gs2^Ȁ…

我实际上只在这里处理两个数字,即2或3,因此代码将读取如下内容……

If (any number directly before ^Ȁ ==2) change it to 1 else if (any number directly before ^Ȁ ==3) change it to 2

我听说所谓的“回溯”或“向后看”是这里所需要的吗?

1 个答案:

答案 0 :(得分:2)

您可以将replace与回调函数一起使用,该函数将使用您自己的逻辑来替换每次出现的事件:

var str = "hs2^Ȁ_^HELLO_x_fs2^Ȁ_^WORLD_x_gn3^Ȁ_^HOME_x_gs3^Ȁ";
var res = str.replace(/\d(?=\^Ȁ)/g, num => --num);

console.log(res);

在上面的正则表达式中,您会注意到这一点:(?=...)。正如@revo所建议的,这是一个积极的展望。它允许您匹配^Ȁ,但避免将其传递给回调函数。仅数字(\d)将被传递,并因此被替换。