Поскольку вызов замены будет работать со всей строкой, две замены, если они выполняются одна за другой, будут мешать друг другу. Независимо от порядка, в котором вызываются замены, это всегда приведет к неверному результату.
Единственный способ решить эту проблему - использовать промежуточное состояние. Например, если бы мы использовали + в качестве промежуточного символа, это было бы что-то вроде:
- Заменить ^^ на +,
- Разбрасывается заменой ^ на пустую строку,
- Затем заменить + на ^
Очевидно, что + символ может появиться в самой исходной строке, поэтому вам нужно выбрать лучший промежуточный символ, который не будет отображаться в исходной строке. Это может быть многосимвольный или даже контрольный символ.
РЕДАКТИРОВАТЬ : Принятый ответ на использование функции заменителя является гораздо лучшим подходом для JS. Я оставляю этот ответ здесь на тот случай, если кто-то наткнется на этот вопрос с аналогичной проблемой на другом языке, где функции заменителя недоступны.