Есть строка "Привет мой дорогой друг, давно тебя не видел. {$@&^[|file|(text)|file|]^&@$} {$@&^[|file|(text1)|file|]^&@$}" Текст перед кодом не ограниченной длины(его надо откинуть, теги тоже не ограничены... надо получить такую комбинацию от каждого тега тип=текст(file=text)(file=text1) И да.... надо на JS
Строка - это хорошо, но вы бы больше сделали акцент на той закономерности, которая отделяет нужные подстроки от остальных данных. Попробую ванговать (пример в песочнице): Код (Javascript): const output = str.match(/\[[^[]+\]/g).map(el => { let [k, v, ..._] = el.replace(/^[[|]+|[|]]+$/g, '').split('|'); return {[k]: v}; }); console.log(output); Если ES6+ не используете, то в старом синтаксисе: Код (Javascript): var output = str.match(/\[[^[]+\]/g).map(function(el) { var part = el.replace(/^[[|]+|[|]]+$/g, '').split('|'), o = {}; o[part[0]] = part[1]; return o; });
если не очень сложно, то как после этого можно заменить этот тег на html?) Код (Text): var str = document.getElementsByTagName("p")['0'].textContent; if(str.indexOf('{$@&^[') + 1) { var output = str.match(/\[[^[]+\]/g).map(function(el) { var part = el.replace(/^[[|]+|[|]]+$/g, '').split('|'),o = {}; o[part[0]] = part[1]; var spos = part[1].substring(1, part[1].length-1); if(part[0] == "file"){ }else if(part[0] == "video"){ }else if(part[0] == "photo"){ }else if(part[0] == "music"){ }else if(part[0] == "vote"){} return o; }); }
предполагается использовать эту конструкцию для замены в тексте {$@&^[|file|(text)|file|]^&@$} на некую html форму, это подобие bbкодов