Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заменить одну строку другой из массива 
:(
    Опции темы
Black
  Дата 7.11.2005, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



Код

<script type='text/javascript'>
  ArrayFirstTag = ["[b]", "[i]"];
  ArrayEndTag = ["[/b]", "[/i]"];

  ReplaceFirstTag = ["<b>", "<i>"];
  ReplaceEndTag = ["</b>", "</i>"];

  text = "[b][i]текст[/i][/b]";

  for(var i=0; i<ArrayFirstTag.length; i++)
  {
    text = text.replace(new RegExp(ArrayFirstTag[i],"g"), ReplaceFirstTag[i]);
  }

  for(var i=0; i<ArrayEndTag.length; i++)
  {
    text = text.replace(new RegExp(ArrayEndTag[i],"g"), ReplaceEndTag[i]);
  }

alert(text);
</script>


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

Цитата
[ b ][ i ]текст[ /i ][ /b ]


заменить на:

Цитата
<b><i>текст</i></b>


но что-то у меня не получается этого сделать :-(
Жалко что в JavaScript нет функции, которая сама бы меняла куски строк на другие строки.

Это сообщение отредактировал(а) sergej.z - 7.11.2005, 18:54


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Sardar
Дата 7.11.2005, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Во первых что есть нормально? Во вторых если ещё и головой подумать, то можно реги писать так
Код
/[b]((?:.|\n)+?)[/b]/g
, заменяя соотвественно на "<b>\\1</b>".

Цитата(DIRECTOR @ 7.11.2005, 17:48)
Жалко что в JavaScript нет функции, которая сама бы меняла куски строк на другие строки.

А replace тебя чем то не устраивает?


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Black
Дата 7.11.2005, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



Sardar
есть строка [a][c][d][/a][/c][/d] надо сделать <a><c><d></a></c></d>
просто менять [ на < нельзя, т.к. не все буквы в [] надо менять, а только определенные.

Как это сделать, что-то у меня на replace ума не хватает.

Цитата
А replace тебя чем то не устраивает?

дык, не могу заставить делать то, что я хочу.


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Sardar
Дата 7.11.2005, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Рег убился парсером, глянь на него по новой, вставляй его как первый аргумент replace, второй идёт следом.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Black
Дата 7.11.2005, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



Sardar, я не могу понять почему так не работает?

Код

<script type='text/javascript'>
  ArrayTag = ["b", "i"];

  text = "[b][i]лала[/i][/b]";

  for(var i=0; i < ArrayTag.length; i++)
  {
    var r = new RegExp("\[(\/)?"+ArrayTag[i]+"\]", "g");
    text = text.replace(r, "<$01"+ArrayTag[i]+">");
  }

  alert(text);
  </script>


НО зато так прекрасно работает

Код

<script type='text/javascript'>
  text = "[b][i]лала[/i][/b]";

  text = text.replace(/\[(\/)?b\]/g, '<$01b>');
  text = text.replace(/\[(\/)?i\]/g, '<$01i>');

  alert(text);
  </script>





--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Sardar
Дата 7.11.2005, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Лучше я тебя спрошу, почему это прекрасно работает? smile

Код
var a="test [b][i]test[/i][/b] text", at;
while((at=a.replace(/\[([a-z]+)\]((?:.|\n)+?)\[\/\1\]/g, "<$01>$02</$01>"))!=a) a=at;
alert(a);



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Black
Дата 7.11.2005, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



Sardar
ладно... Буду делать

Цитата
Лучше я тебя спрошу, почему это прекрасно работает?

я бы сам хотел знать smile


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Sardar
Дата 7.11.2005, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(DIRECTOR @ 7.11.2005, 20:34)
я бы сам хотел знать

/\[([a-z]+)\]((?:.|\n)+?)\[\/\1\]/g - рег означает:
  • найти вхождение \[[a-z]+\] в строке, запомнить содержимое между []
  • найти вхождение любых символов, т.е. проход до конца строки
  • построить рег [<тег>], на место тега поставиь запомненную строку в ранее
  • отодвинуться на самое малое количество позиций, которое может допустить только что построенный рег
  • найти построенный рег, если его нет, перейти к пункту выше, до тех пор, пока не упрёмся в строку найденную в пункте 1 + ещё один символ.
  • если построенный рег таки найден, вырезать всю строку, заменить шаблоном
Как видишь с точки зрения скорости это жутко не эффективный рег smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Black
Дата 7.11.2005, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



Цитата
Как видишь с точки зрения скорости это жутко не эффективный рег

это какой-то монстр, а не рег. С меня +.


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Zeroglif
Дата 7.11.2005, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(DIRECTOR @ 7.11.2005, 20:36)
есть строка [a][c][d][/a][/c][/d] надо сделать <a><c><d></a></c></d>
просто менять [ на < нельзя, т.к. не все буквы в [] надо менять, а только определенные.
Как это сделать, что-то у меня на replace ума не хватает.


Простейший вариант - символы, которые надо менять задаются внутри регулярного, соответственно a|b|c меняем, d - нет.

Код

t="[a][b][c][d][/d][/c][/b][/a]".replace(/\[(\/?)(a|b|c)\]/g,'<$1$2>');


Цитата(DIRECTOR @ 7.11.2005, 21:01)
я не могу понять почему так не работает?


Не работает, потому как нужно добавлять двойной обратный слэш иначе виден метасимвол, а не символ. "При создании регулярного выражения следует учитывать, что заключение его в кавычки влечет за собой необходимость использовать escape-последовательности, как и в любой другой строковой константе".

Это сообщение отредактировал(а) Zeroglif - 8.11.2005, 00:52
PM MAIL WWW   Вверх
Black
Дата 8.11.2005, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



Zeroglif
о, и вправду, если так, то работает:

Код

<script type='text/javascript'>
ArrayTag = ["b", "i"];
text = "[b][i]лала[/i][/b]";

for(var i=0; i < ArrayTag.length; i++)
  {
    var r = new RegExp("\\[(\\/)?"+ArrayTag[i]+"\\]", "g");
    text = text.replace(r, "<$01"+ArrayTag[i]+">");
  }

alert(text);
</script>





--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1351 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.