我有一长串看起来像这样的代码
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
我听说所谓的“回溯”或“向后看”是这里所需要的吗?
答案 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
)将被传递,并因此被替换。