Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вставка строки в строку (https://javascript.ru/forum/misc/27430-vstavka-stroki-v-stroku.html)

bpystep 12.04.2012 18:57

вставка строки в строку
 
необходимо автоматически добавить в какойто текст(строку), конструкцию(строку) " ...[end] " после n-ого слова (в примере это 5 слово).

допустим есть текст:
aaa bbb ccc ddd
[a url="http://vk.com/bpystep"]123[/a]
[img url='http://cs4578.userapi.com/a_0b40d4e9.jpg' pos='center']

и скрипт:
var list = node.value.split(" "); //node - это обект TextArea
var pos = node.value.indexOf(list[4]);

for (var i=0; i<list.length; i++) {
	if (list[i] == '...[end]') { // проверяет есть ли уже в тексте " ...[end] "
		var flag = true;
	}
}
if (!flag) { // ну и если нет
	var str1 = node.value.substr(0,pos);
	var str2 = node.value.substr(pos);
	node.value = str1+' ...[end] '+str2; // добавляет " ...[end] "
}

проблема в том, что скрипт разбивает как слова(по принципу разделителя "пробел"), так и bb-code и может разбить [a url="http://vk.com/"]123[/a] на "[a" и "url="http://vk.com/"]123[/a]".
Вопрос: как бы нам заставить скрипт понимать bb-code, содержащие проблемы как 1 слово?

bpystep 12.04.2012 19:28

сделал, но может быть какието другие способы? (если захочется добавить какой-нибудь другой bb-code)
var search = new Array('[a url=','[img url=','\' pos');
var replace = new Array('[a_url=','[img_url=','\'_pos');
for (var i=0; i<search.length; i++) {
	node.value = node.value.replace(search[i],replace[i]);
}
		
var list = node.value.split(" ");
var pos = node.value.indexOf(list[6]);

for (var i=0; i<list.length; i++) {
	if (list[i] == '...[end]') {
		var flag = true;
	}
}
if (!flag) {
	var str1 = node.value.substr(0,pos);
	var str2 = node.value.substr(pos);
	node.value = str1+' ...[end] '+str2;
	for (var j=0; j<search.length; j++) {
		node.value = node.value.replace(replace[j],search[j]);
	}
}

bpystep 13.04.2012 19:38

не ну разве это нормально, я создал тему. никто в ней не отписался, кроме меня. но в репу я получил -200 очей от кого-то. ну и нахера?

п.с. если вы знаете больше, чем я, дак вы поделитесь опытом, а не занимайтесь херней типа "минусну ка я ему".

rtfm_man 29.09.2015 14:55

Вот как по мне чуть более элегантный метод, что ли.
String.prototype.addSubStr = function(pos,str){
            var beforeSubStr = this.substring(0,pos);
            var afterSubStr = this.substring(pos,this.length);
            return beforeSubStr+str+afterSubStr;
        }


А если нужно заменить, то объединить с вот таким методом
String.prototype.removeFromTo = function(pos,end){
            var beforeSubStr = this.substring(0,pos);
            var afterSubStr = this.substring(end,this.length);
            return beforeSubStr+afterSubStr;
        }


PS ко всему прочему, по-моему, обращение к строке как к массиву через квадратные скобки не воспринимается старыми браузерами, так что этот метод еще и кроссплатформенней.


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