Вы соответствует двум \S
частям, не захватывая их:
.replace(/(?<!\w)\'\S(.*?)\S\'(?!\w)/g
// ^^ ^^
Таким образом, при замене на первую группу захвата, заключенную в кавычки:
'‘$1’'
// ^^
Символы \S
не входят в группу захвата (.*?)
, поэтому они не включены в замену $1
.
Поместите все, что вы хотите заменить, в группу захвата :
var result = 'This \'is an\' example'
.replace(
/(?<!\w)'(\S.*?\S)'(?!\w)/g,
'‘$1’'
);
console.log(result)
(также обратите внимание, что '
не нужно экранировать в шаблоне)
Вы также можете рассмотреть возможность использования \B
("not граница слова ") вместо отрицательного поиска для \w
, что сделает шаблон совместимым со старыми браузерами и более краткими:
var result = 'This \'is an\' example'
.replace(
/\B'(\S.*?\S)'\B/g,
'‘$1’'
);
console.log(result)