正则表达式替换不会替换字符的匹配字符

Regex substitution does not replace match character for character

我正在尝试使用 Regex 动态捕获字符串中的所有数字,例如 1234-12-1234 或 1234-123-1234,但不知道每个字符串段中将出现的字符数。我已经能够通过以下表达式使用积极的前瞻来捕捉这一点:[0-9]*(?=-)。但是,当我尝试将数字替换为 Xs 以便将最后一个破折号之前出现的每个数字替换为 X 时,正则表达式不会 return X 用于数字 1:1。相反,每个部分 return 恰好有两个 X。我怎样才能使正则表达式 return 以下内容:

1234-123-1234 -> XXXX-XXX-1234
1234-12-1234 -> XXXX-XX-1234

代替现在的

1234-123-1234 -> XX-XX-1234

?

Link to demo

问题是,通过将 * 直接放在数字匹配之后,不止一个数字将被单个 X 替换。然后零数字将被单个 X 替换。因此,任意数量的数字都将是有效地替换为两个 X。

改用这个:

[0-9](?=.*-)