javascript regex look behind 替换一个字符

javascript regex look behind to replace a character

我有一长串代码,看起来像

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

我听说过一种叫做“回头看”或“向后看”的东西,这里需要什么吗?

您可以将 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) 将被传递,因此被替换。