Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Строка в массив по регулярному выражению (https://javascript.ru/forum/dom-window/39336-stroka-v-massiv-po-regulyarnomu-vyrazheniyu.html)

Pegas12345 25.06.2013 21:55

Строка в массив по регулярному выражению
 
Дорогие профи, помогите разобраться, никак не получается.

Дано строка:

":11: Привет, как дела? :02::05: Всё хорошо, пока! :21:Удачи... :14:"

Нужно разделить строку на массив, чтобы получилось так:

arr[0]=":11:";
arr[1]="Привет, как дела?";
arr[2]=":02:";
arr[3]=":05:";
arr[4]="Всё хорошо, пока!";
...
arr[n]=":14:";

Чтобы потом каждый элемент массива уже обработать по своему. Заменить ":число:" на нужные смайлы с картинкой. В голову приходит только этот варинат:

str=":11: Привет, как дела? :02::05: Всё хорошо, пока! :21:Удачи... :14:";
reg=/(:{1}\d{2}:{1})/gi;
list=str.split(reg);

Получаю массив, того что нужно, но это не работет в IE. Какие ещё есть другие варинанты (кроссбраузерные), для решения данной задачи?

bes 25.06.2013 22:08

чем match не устроил
var str = ":11: Привет, как дела? :02::05: Всё хорошо, пока! :21:Удачи... :14:";
var reg = /(:\d+:)/g;
var list = str.match(reg);
alert(list);

Deff 25.06.2013 22:39

var str=":11: Привет, как дела? :02::05: Всё хорошо, пока! :21:Удачи... :14:"
var arr = str.replace(/^:|:$/gim,'').split(/:+/);
alert(arr.join(',\n'))

Pegas12345 25.06.2013 23:04

Deff, спасибо! Именно то что нужно. Столько времени мучался, никак не выходило, надо было раньше спросить :)

В варианте у bes, выводились только цифры, мне нужно было с текстом... У меня тоже так получалось, текст пропадал...

bes 25.06.2013 23:08

Цитата:

Сообщение от Pegas12345
В варианте у bes, выводились только цифры, мне нужно было с текстом... У меня тоже так получалось, текст пропадал...

ты ж написал
Цитата:

Сообщение от Pegas12345
Чтобы потом каждый элемент массива уже обработать по своему. Заменить ":число:" на нужные смайлы с картинкой.

зачем тебе лишний текст, да и сам массив собственно

Pegas12345 26.06.2013 11:54

Цитата:

зачем тебе лишний текст, да и сам массив собственно
я получаю данные по ajax запросу в xml формате, и чтобы после вставить в окно чата сообщение, ДОМ, нужно создать элементы, текст или картинка. Вот и обхожу массив, и если картинка создаю объект картинка, если текст, то текст, а после встраиваится уже готовое сообщение в конец div-а.

bes 26.06.2013 20:16

Цитата:

Сообщение от Pegas12345
я получаю данные по ajax запросу в xml формате, и чтобы после вставить в окно чата сообщение, ДОМ, нужно создать элементы, текст или картинка. Вот и обхожу массив, и если картинка создаю объект картинка, если текст, то текст, а после встраиваится уже готовое сообщение в конец div-а.

приведи пример получаемого xml, так как ты привёл только строку, в которой хml и не пахнет
не обязательно делать нечто вроде
<script>
window.onload = function () {
	var img;
	document.body.appendChild(img = new Image(100, 100));
	img.src = "http://javascript.ru/forum/images/ca_serenity/misc/logo.gif";
	document.body.appendChild(img = new Image(100));
	img.src = "http://javascript.ru/forum/image.php?u=19820&dateline=1334914235";
}
</script>

чтобы собрать, по сути, текстовое сообщение

Pegas12345 27.06.2013 16:56

Да нет, строка точно xml, просто я уже тут в примере только просто текстом написал, а так полученные данные приходя в виде:
Код:

<mesg num='' color='' from='' to=''>текст сообщения</mesg>
вот "текст сообщения" и обрабатываю. Уже сделал, всё работатет :) Только IE замучал со своими заморочками... :)

bes 27.06.2013 21:16

Цитата:

Сообщение от Pegas12345
Да нет, строка точно xml,

ой не факт
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<mesg num='' color='' from='' to=''>текст сообщения</mesg>
<mesg num='' color='' from='' to=''>текст сообщения</mesg>
<button class="but">click</button>
<script>
jQuery(function ($) {
	$(".but").on("click", function () {
		alert($("mesg").text());
	});
});
</script>


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