Предполагая, что не будет вложенных скобок, как в примере, я бы выделил части строки между начальным /^
и завершающим $/
, а затем использовал бы регулярное выражение для захвата несимволы в скобках и замените их на группу, заключенную в скобки.Кроме того, после символов, не являющихся скобками, необязательно совпадают (
s, за которыми следуют символы без скобок, затем )
, и, если эта группа соответствует, замените только на эту группу (без скобок):
([^(]+)(?:\(([^)]+)\))?
Заменить на
($1)$2
https://regex101.com/r/gLrHsH/1
const str = /^\w+\[\w+\]\[\w+\]\[(\d+)\]\[\w+\]\[(\d+)\]\[\w+\]$/.toString();
const sliced = str.slice(2, str.length - 2);
const output = '/^' + sliced.replace(/([^(]+)(?:\(([^)]+)\))?/g, '($1)$2') + '$/';
console.log(output);
([^(]+)(?:\(([^)]+)\))?
означает:
([^(]+)
- Non- (
символов (?:\(([^)]+)\))?
Не обязательно- группа захвата, содержащая: \(
- ведущий (
([^)]+)
- не- )
символы, захваченные в группе \)
-Трейлинг )