последние кавычки схлопываются, если не ошибаюсь
const src = '"По приказу ОАО "Рога и Копыта""';
src.split('').reduce((acc,c,i,arr) => {
if (c === '"') {
const prev = i ? arr[i - 1] : '';
if (i && prev !== ' ') {
if (prev === '"') return acc;
acc += '»';
} else {
acc += '«';
}
} else {
acc += c;
}
return acc;
}, '')
const requote = source => {
const Q_OPEN = 1;
const Q_CLOSE = 2;
const SPACE = 3;
const OTHER = 4;
let prev = SPACE;
return source.split('').reduce((acc, c, i, arr) => {
if (c === '"') {
if (prev !== SPACE) {
if (prev === Q_CLOSE) return acc;
acc += '»';
prev = Q_CLOSE;
} else {
acc += '«';
prev = Q_OPEN;
}
} else {
acc += c;
prev = c === ' ' ? SPACE : OTHER;
}
return acc;
}, '')
}
requote(src)