Ваш конкретный вариант использования допускает более простую реализацию, но, будучи очень строгим к вашему вопросу, вы можете использовать это регулярное выражение:
/(?<=:)([^:]+)(?=:)/g
Он ищет любой текст без двоеточия, которому предшествует, а затем следуетдвоеточие.Таким образом, вы можете изменить «str» на «start: hello :: brave new world: end», и он все еще соответствует вашему правилу в том смысле, что «start» и «end» исключены, потому что у них нет двоеточий с обеих сторон,и «дивный новый мир» появляется как единое целое.
const str = 'start:hello::brave new world:end';
const matches = str.match(/(?<=:)([^:]+)(?=:)/g);
console.log(matches); // ["hello", "brave new world"]
Как указывает @Mohammad, lookbehind (первая часть в скобках) - это новая функция.Таким образом, вы можете настроить мой подход к:
const str = 'start:hello::brave new world:end'
const matches = str.match(/:([^:]+)(?=:)/g).map(s => s.slice(1));
console.log(matches);