Regex - неправильный способ справиться с XML.
. Лучше использовать DOMParser и XMLSerializer , чтобы вы могли проходить через DOM и обновлять элементы, используя DOM методы:
const answer = '<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>h</mi><mfenced><mi>x<mspace linebreak="newline"/></mi></mfenced><mo>=</mo><semantics><mrow><mo>-</mo><mn>3</mn></mrow></semantics><mspace linebreak="newline"/><mi>D</mi><mo>=</mo><mi mathvariant="normal">ℝ</mi></math>';
const D = (new DOMParser()).parseFromString(answer, "text/xml")
const mspaces = D.getElementsByTagName('mspace');
mspaces[mspaces.length-1].outerHTML = '<mspace width="10px"/>';
const updated = (new XMLSerializer()).serializeToString(D);
console.log(updated)
.as-console-wrapper {top:0; max-height:none !important}
Решение для регулярных выражений также доступно, но менее надежно:
const answer = '<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>h</mi><mfenced><mi>x<mspace linebreak="newline"/></mi></mfenced><mo>=</mo><semantics><mrow><mo>-</mo><mn>3</mn></mrow></semantics><mspace linebreak="newline"/><mi>D</mi><mo>=</mo><mi mathvariant="normal">ℝ</mi></math>';
const updated = answer.replace(/(.*)<mspace[^/]+\/>/, '$1<mspace width="10px"/>');
console.log(updated)
.as-console-wrapper {top:0; max-height:none !important}
Надеюсь, это поможет.