Разделение строки по тегам
Подскажите как в js разделить строку вида:
*tag_1: текст * примечание *tag_2: текст: 2 *tag_3: <p>test </p> По тегам, чтобы на выходе получить массив тегов и подходящим к ним текстам tag_1 - текст * примечание tag_2 - текст: 2 Сами теги в тексте начинаются со знака звездочки, могут иметь латинские символы, цифры, знак подчеркивания _ и заканчиваются двоеточием при этом в тексте могут могут встречаться звездочки и довоеточия |
var str = '*tag_1: текст * примечание *tag_2: текст: 2 *tag_3: <p>test </p>'; var arr = str.split(/\s*\*(?=tag_\d+)/); arr && arr.shift(); console.log(arr); |
sergeev26,
массив на выходе покажите? |
Ruslan_xDD,
:lol: var str = '*tag_1: текст * примечание *tag_2: текст: 2 *tag_3: <p>test </p>'; str = str.split(/\*(\w+):/); str && str.shift(); alert(JSON.stringify(str)); |
Наверное я не совсем точно выразился, вместо:
tag_1 tag_2 tag_3 могут быть любые слова на латинице, а так же они могут содержать цифры и знак подчеркивания например: *text: текст *html_1: <p>текст*</p> *title: заголовок: текст |
Цитата:
var str = '*text: текст *html_1: <p>текст*</p> *title: заголовок: текст'; str = str.split(/\*(\w+):/); str && str.shift(); alert(JSON.stringify(str)); |
Цитата:
Цитата:
|
var str = '*text: текст *html_1: <p>текст*</p> *title: заголовок: текст'; str = str.split(/\*(?=\w+:)/); str && str.shift(); alert(JSON.stringify(str)); |
Возможно ли сделать проверку на ошибки
к примеру, если в строке будет ошибочный пробел * tag: text либо *tag : text сейчас при такой ошибке в первом теге, он полностью удаляется |
sergeev26,
var str = '* text : текст *html_1: <p>текст*</p> *title: заголовок: текст * tag: text *tag : text'; str = str.split(/\*\s?(\w+)\s?:/); str && str.shift(); alert(JSON.stringify(str)); |
при такой выборке, почему пропадают последние теги
var str = '*text : текст *html_1: <p>текст*</p>: *title: заголовок текст *tag: text1 *tag2: text'; считывает *title: заголовок текст, а то что дальше не распознает |
Цитата:
в каком браузере и что пропало? ["text", " текст ", "html_1", " <p>текст*</p>: ", "title", " заголовок текст ", "tag", " text1 ", "tag2", " text"] |
Цитата:
а, можно как-то сразу преобразовать строку из JSON.stringify в объект или массив чтоб получить: ключ - значение (тег - текст тега) |
Цитата:
Цитата:
Цитата:
|
Цитата:
Необходимо на выходе получить массив где в роли ключа тег, а значение = текст тега Можно конечно обойти циклом и записать первое значение в ключ, а второе в value, но выглядит не надежно var str = '*text : текст *html_1: <p>текст*</p>: *title: заголовок текст * tag: text1 *tag2: text'; str = str.split(/\*\s?(\w+)\s?:/); str && str.shift(); var arr = []; for (var key in str) { if (key & 1) { var key2 = parseInt(key) - 1; arr[str[key2].trim()] = str[key].trim() } } console.log(arr); |
sergeev26,
var str = '*text : текст *html_1: <p>текст*</p>: *title: заголовок текст *tag: text1 *tag2: text'; str = str.split(/\*\s?(\w+)\s?:/); str && str.shift(); str = str.filter(function(a, i, d) { if(i % 2) return true; var obj = {}; obj[a] = d[i+1].trim(); d[i+1] = obj return false }) alert(JSON.stringify(str)); |
var str = '*text : текст *html_1: <p>текст*</p>: *title: заголовок текст *tag: text1 *tag2: text'; var result = {}; str.replace(/\*(\w+)\s*:\s*.+?(?=$|(?:\s*\*\w+\s*:))/g, function(m, key, value) { result[key] = value; }); alert(JSON.stringify(result)); |
Ruslan_xDD,
что-то не так с value |
sergeev26,
Цитата:
|
sergeev26,
:-? var str = '*text : текст *html_1: <p>текст*</p>: *title: заголовок текст *tag: text1 *tag2: text'; str = str.split(/\*\s?(\w+)\s?:/); str && str.shift(); str = str.reduce(function(a, b, i, d) { (++i % 2) && (a[b] = d[i].trim()) return a },{}) alert(JSON.stringify(str)); |
Цитата:
Теперь работает: var str = '*text : текст *html_1: <p>текст*</p>: *title: заголовок текст *tag: text1 *tag2: text'; var result = {}; str.replace(/\*(\w+)\s*:\s*(.+?)(?=$|(?:\s*\*\w+\s*:))/g, function(m, key, value) { result[key] = value; }); alert(JSON.stringify(result)); |
Часовой пояс GMT +3, время: 11:01. |