Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.11.2012, 01:41
Кандидат Javascript-наук
Отправить личное сообщение для OklickSpb Посмотреть профиль Найти все сообщения от OklickSpb
 
Регистрация: 17.02.2012
Сообщений: 130

replace заменяет только первое вхождение
Здравствуйте!
var text = $("[name='"+NameInput+"']").val();
	var result1 = text.replace("[b]", "<b>").replace("[/b]", "</b>");
	var result2 = result1.replace("[i]", "<i>").replace("[/i]", "</i>");
	var result3 = result2.replace("[u]", "<u>").replace("[/u]", "</u>");
	var result4 = result3.replace("[big]", "<big>").replace("[/big]", "</big>");
	var result5 = result4.replace("[small]", "<small>").replace("[/small]", "</small>");
	var result6 = result5.replace("[color red]", "<font color=\"red\">").replace("[/color red]", "</font>");
	var result7 = result6.replace("[img]", "<img style=\"max-width: 200px; max-height: 200px;\" src=\"").replace("[/img]", "\">");
	//retult = result.replace("[/b]", "</b>");
	$("#"+IdDiv).html(result7);

Суть проблеммы в том, что если в тексте есть только один (например [b]), то все нормально, а если несколько, то заменится только первая.
Вот пример:
//Ввели:
[b]Привет мир1![/b]
[i]Привет мир2![/i]
[u]Привет мир3![/u]
//Получили:
<b>Привет мир1!</b>
<i>Привет мир2!</i>
<u>Привет мир3!</u>

-------Все нормально-----
//Ввели:
[b]Привет мир1![/b]
[b]Привет мир2![/b]
[b]Привет мир3![/b]
//Получили:
<b>Привет мир1!</b>
[b]Привет мир2![/b] [b]Привет мир3![/b]
-------Не заменились все кроме первого ------

Как бороться?
Ответить с цитированием
  #2 (permalink)  
Старый 14.11.2012, 06:31
Профессор
Отправить личное сообщение для Dmitriyff Посмотреть профиль Найти все сообщения от Dmitriyff
 
Регистрация: 22.07.2012
Сообщений: 164

ох... где-то на хабре про это было, суть в том что, в данном случае replace ищет только первое вхождение, и заканчивает работу, пользуетесь regexp

как-то так
replace(/\[b\]/g, "<b>")
Ответить с цитированием
  #3 (permalink)  
Старый 14.11.2012, 06:34
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,034

Вам надо начать с азов. Почитать справочник на этом сайте. Явно же не разбираетесь.

Вас бы наверное устроил ответ вроде: используйте вместо [b]"" - /\[b\]/g (upd как раз пока писал - предложили), но на само то деле данная задача решается иначе. Стоит погуглить, коючевые слова: bbcode javascript.

Функция на коленке, для примера:
<!DOCTYPE HTML>
<html lang="ru-RU">
<head>
	<meta charset="UTF-8">
	<title></title>
</head>
<body>
	
<textarea name="" id="text" cols="30" rows="10">
click
[b]Привет мир1![/b]
[i]Привет мир2![/i]
[u]Привет мир3![/u]

</textarea>
<script type="text/javascript">
	var text = document.getElementById('text');
var pattern = {
	'b':		['<b>','</b>'],
	'i':		['<i>','</i>'],
	'u':		['<u>','</u>'],
	'big':		['<big>','</big>'],
	'small':	['<small>','</small>'],
	'color red':['<font color="red">','</font>'],
	'img':		['<img style="max-width: 200px; max-height: 200px;" src="','">']
}



function unBB( string, pattern ){
	return string.replace( 
		/\[(\/?)([^\]]+?)\]/gi, 
		function(str, close, tag){
			if(!pattern[tag]) return str;
			
			if(close) return pattern[tag][1];
			
			return pattern[tag][0];
		}
	)
}

text.onclick = function(){
	text.value = unBB( text.value, pattern )
}
</script>
</body>
</html>
__________________
29375, 35

Последний раз редактировалось Aetae, 14.11.2012 в 06:48.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элементарный подсчет и калькулятор PashaShulga Общие вопросы Javascript 5 14.03.2012 20:42
Захват переменной из printf (php) видит только первое значение Sadist_dead AJAX и COMET 18 25.08.2011 15:13