Это может быть сделано с использованием одного регулярного выражения и перегрузки функции replace
с заменой в качестве второго аргумента. Но если честно, я должен использовать еще один replace
, чтобы избавиться от плюсов (+
) - я заменил их пробелом (
) символ:
var str = 'genre:+Drama,Comedy+cast:+Leonardo+DiCaprio,Cmelo+Hotentot+year:+1986-1990';
str = str.replace(/\+/g, ' ');
var result = str.replace(/(\w+:)(\s?)([\w,\s-]+?)(\s?)(?=\w+:|$)/g, function (m, m1, m2, m3, m4, o) {
return m1 + ' [' + m3.split(',').join(', ') + ']' + (o + m.length != str.length ? ',' : '') + '\n';
});
Вы можете найти полный пример на jsfiddle.
Почему это _have_ должно быть только одним регулярным выражением? – Oded
вы не можете, в общем, потому, что есть два уровня группировки для результатов (тема и запись), а регулярные выражения поддерживают только один уровень. –
Я надеялся на элегантное одно регулярное выражение :) Мне было просто любопытно, можно ли это сделать – acheruns