Это выражение может удовлетворять первому имеющемуся у вас условию:
(\([0-9]+\))api3(\([0-9]+\))central(\([0-9]+\))sophos(\([0-9]+\))com(\([0-9]+\))
Вы также можете расширить его и добавить / уменьшить границу, если хотите, возможно, что-то похожее на это:
(\([0-9]+\))(api3)\([0-9]+\)(central)\([0-9]+\)(sophos)\([0-9]+\)(com)\([0-9]+\)
Затем замените его на что-то похожее на:
$2.$3.$4.$5
Схема RegEx
Вы можете визуализировать свои выражения в jex.im :
JavaScript Test
const regex = /(\([0-9]+\))(api3)\([0-9]+\)(central)\([0-9]+\)(sophos)\([0-9]+\)(com)\([0-9]+\)/gm;
const str = `(4)api3(7)central(6)sophos(3)com(0)`;
const subst = `$2.$3.$4.$5`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
Вы, конечно, можете значительно упростить это.Тем не менее, я добавил ограничения, просто чтобы быть в безопасности.
Редактировать:
Если вы хотите захватить первое и последнее число, вы можете просто сопоставить и заменить его на выражение , подобное этому :
(\([0-9]+\))(.+)(\([0-9]+\))
Затем вы можете просто захватить остальных посередине с помощью другого выражения :
(\([0-9]+\))