Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разделение строки по тегам (https://javascript.ru/forum/misc/69499-razdelenie-stroki-po-tegam.html)

sergeev26 28.06.2017 21:22

при такой выборке, почему пропадают последние теги

var str = '*text : текст *html_1: <p>текст*</p>: *title: заголовок текст *tag: text1 *tag2: text';

считывает *title: заголовок текст, а то что дальше не распознает

рони 28.06.2017 21:59

Цитата:

Сообщение от sergeev26
считывает *title: заголовок текст, а то что дальше не распознает

:-?
в каком браузере и что пропало?
["text", " текст ", "html_1", " <p>текст*</p>: ", "title", " заголовок текст ", "tag", " text1 ", "tag2", " text"]

sergeev26 29.06.2017 15:32

Цитата:

Сообщение от рони (Сообщение 456836)
:-?
в каком браузере и что пропало?
["text", " текст ", "html_1", " <p>текст*</p>: ", "title", " заголовок текст ", "tag", " text1 ", "tag2", " text"]

моя ошибка, все работает хорошо

а, можно как-то сразу преобразовать строку из JSON.stringify в объект или массив

чтоб получить: ключ - значение (тег - текст тега)

рони 29.06.2017 16:55

Цитата:

Сообщение от sergeev26
а, можно

не осилил и вас ещё в третьем сообщении просили показать что хотите получить на выходе?!
Цитата:

Сообщение от sergeev26
в объект или массив

:blink: все вам показанные способы дают массивы, причём тут
Цитата:

Сообщение от sergeev26
JSON.stringify

???

sergeev26 29.06.2017 18:07

Цитата:

Сообщение от рони (Сообщение 456901)
не осилил и вас ещё в третьем сообщении просили показать что хотите получить на выходе?!

:blink: все вам показанные способы дают массивы, причём тут ???


Необходимо на выходе получить массив где в роли ключа тег, а значение = текст тега

Можно конечно обойти циклом и записать первое значение в ключ, а второе в 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);

рони 29.06.2017 18:32

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));

ruslan_mart 29.06.2017 21:17

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));

рони 29.06.2017 21:22

Ruslan_xDD,
что-то не так с value

рони 29.06.2017 21:27

sergeev26,
Цитата:

Сообщение от рони
показать что хотите получить на выходе?!


рони 29.06.2017 21:32

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));


Часовой пояс GMT +3, время: 04:06.