Использование .*
будет соответствовать >
, и если - по какой-то причине - ваш XML-файл не разбит на несколько строк (то есть уменьшен), вы будете соответствовать больше, чем должны.Чтобы избежать этого, вы можете использовать [^>]*
для сопоставления всего до >
.
Поскольку вы корректно включили сплиттер , сопоставление будет намного проще и намногоболее предсказуемо (как вы упомянули, вы соответствуете SetType
без разделителя).
Без разделителя вам придется использовать шаблон регулярного выражения, который напоминает <Set(?!Type>)[^>]*
или <Set(?!(?:Type|SomethingElse)>)[^>]*
, если у вас было большетолько один суффикс к Set
, который должен остаться.Эти методы используют отрицательный взгляд, чтобы утверждать, что следующее не совпадает.
var str = `<SetXMLSPLITBLAH>
<Value>9</Value>
<SetType>
<Name>Foo</Name>
</SetType>
</SetXMLSPLITBLAH>`
var XML_SPLITTER = 'XMLSPLIT'
var p = `(</?)Set${XML_SPLITTER}[^>]*`
var r = new RegExp(p,'g')
x = str.replace(r,'$1Set')
console.log(x)