Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получить подстроку силами RegExp (https://javascript.ru/forum/misc/5639-poluchit-podstroku-silami-regexp.html)

kozakmamai 28.10.2009 10:33

Получить подстроку силами RegExp
 
Добрый день!
Помогите плиз. решить задачу.
Есть строка:
var str = "string <em>substring<em>substring</em>substring</em> xxx substring xxx <em>substring</em> xxx <em>substring</em>";

Необходимо используя регулярное выражение, выбрать из представленной строки подстроки (выделены underline):

str = "string <em>substring<em>substring</em>substring</em> xxx substring xxx <em>substring</em> xxx <em>substring</em>";

То-есть необходимо выделить содержимое самых внешних тегов <em>
Выражение, к которому я додумался:
pattern = /\<em\>(.*?)\<\/em\>/g;

Проблемы не решает, поскольку не выбирает вложенности.
Заранее спасибо!

Kolyaj 28.10.2009 11:24

Я считаю, что регулярными выражениями никак, но может кто-то считает по другому )))

vk65535 28.10.2009 17:28

var ems = (function() {
	var re = /\<(\/?)em\>/g;
	return function(str) {
		var r = [], _, level = 0, last;
		for (re.lastIndex = 0; _ = re.exec(str); )
			if (!_[1]) {
				if (!level++) last = re.lastIndex;
			} else if (level && !--level)
				r.push(str.substr(last, _.index - last));
		if (level) r.push(str.substr(last));
		return r;
	};
})();

alert(ems('string <em>substring<em>substring</em>substring</em> xxx substring xxx <em>substring</em> xxx <em>substring</em>').join('\n'));

Kolyaj 28.10.2009 17:32

vk65535,
это же можно было сделать проще с помощью str.replace.

kozakmamai 29.10.2009 11:31

vk65535 лихо! :) Спасибо, буду разбираться


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