Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Поиск и замена текста с сохранением кусков

Сообщения:  [1-10]   [11-13] 

 
 автор: kasmanaft   (02.11.2006 в 11:53)   письмо автору
 
   для: SHAman   (02.11.2006 в 11:18)
 

пожалуста :)
а функция, вроде бы не видна

   
 
 автор: SHAman   (02.11.2006 в 11:18)   письмо автору
 
   для: SHAman   (02.11.2006 в 09:55)
 

Вот что получилось в результате. Спасибо большое за помощь. Сам бы долго допирал...


<html> 
<head> 
<title>регэкспы</title> 
<script language="JavaScript"> 
var d = document; 
var my_links = new Array('#','smth.html', 'smth_else.html');

function get_links(need_id) 

var test_text = d.all[need_id].innerHTML; 
var reg=/::\["?(\w+\.\w{2,7})"?\](.*?)::/g; 
var res; 
var arr = new Array(); 

function func($0,$1,$2)    { 
var hm_links=my_links.length;
    arr.push($1, $2, ' -- '); 
    my_links.push($1);
    var ret = '::[' + hm_links + ']' + $2 + '::';
    return(ret); 


res = test_text.replace(reg, func);
d.all[need_id].innerHTML=res;
alert(my_links);

</script> 
</head> 
<body onload="get_links('page_content');"> 
<div id="page_content"> 
<h1>Заголовок</h1> 
<p>Текст, из которого мне нужно вытащить некие ::["smth.html"]подстроки:: и вернуть их без фактических ::[adresa.html]адресов::</p> 
</div> 
</body> 
</html> 



Кстати, вопрос: функция func, определенная в теле другой функции видна другим функциям? Или ее видит только родитель?

   
 
 автор: SHAman   (02.11.2006 в 09:55)   письмо автору
 
   для: kasmanaft   (31.10.2006 в 15:09)
 

Спасибо большое! Очень помогло. Заодно приобрел некий опыт работы с регэкспами в ЯС. Как допишу скрипт до конца - покажу что получилось.

   
 
 автор: kasmanaft   (31.10.2006 в 15:09)   письмо автору
 
   для: SHAman   (31.10.2006 в 13:21)
 

Тогда можно было сразу метод replace использовать:

<html>
<head>
<title>регэкспы</title>
<script language="JavaScript">
var d = document;
function get_links()
{
  var test_text = d.all.text.innerHTML;
  var reg=/::\[(\d+)="(\w+\.\w{2,7})"\](.*?)::/g;
  var res;
  var arr = new Array();
  function func($0,$1,$2,$3)
  {
    arr.push($1, $2, ' -- ');
    return($3);
  }
  res = test_text.replace(reg, func);
  alert(res);
  alert(arr);
}
</script>
</head>
<body onload="get_links();">
<div id="text">
<h1>Заголовок</h1>
<p>Текст, из которого мне нужно вытащить некие ::[12="smth.html"]подстроки:: и вернуть их без фактических ::[3="adresa.html"]адресов::</p>
</div>
</body>
</html>

   
 
 автор: SHAman   (31.10.2006 в 13:21)   письмо автору
 
   для: kasmanaft   (30.10.2006 в 18:52)
 

>Честно говоря, не дружу с javascript'ом ... но кое-что сообразил:
Я дружу, но не крепко... ;) в частности, регэкспы вообще не пользовал раньше в нем, а вот щас надо. Не хочется просто делать скрипт серверный ради такой мелочи.

----
Теперь вернемся к нашим баранам:
Основная задача, ради которой я брался вообще в этом копаться, звучит так:
- захватить все куски текста вида ...
- написать их без фактических адресов
- запомнить фактические адреса и цифры, чтобы потом использовать.

Найти - нашли, запомнить - запомнили, а вот убрать как? Там метод есть replace. Вот только как его юзать здесь - не совсем понятно. Надо обращаться к перемнным $n, а как это делать в JS?

   
 
 автор: kasmanaft   (30.10.2006 в 18:52)   письмо автору
 
   для: SHAman   (30.10.2006 в 14:04)
 

Честно говоря, не дружу с javascript'ом ... но кое-что сообразил:

<html>
<head>
<title>регэкспы</title>
<script language="JavaScript">
var d=document;
function get_links()    {
var test_text=d.all.text.innerHTML;
var reg=/:{2}\[(\d+)=\"(\w+\.\w{2,7})\"\].*?:{2}/g;
var res;
var arr = new Array();
while (res=reg.exec(test_text))
       arr.push (res);
alert(arr);
}
</script>
</head>
<body onload="get_links();">
<div id="text">
<h1>Заголовок</h1>
<p>Текст, из которого мне нужно вытащить некие ::[12="smth.html"]подстроки:: и вернуть их без фактических ::[3="adresa.html"]адресов::</p>
</div>
</body>

В массиве arr у нас будет содержимое всего массива res, вместе с нулевыми элементами ... Но это уже что-то .. Отсюда уже можно плясать.

   
 
 автор: SHAman   (30.10.2006 в 14:04)   письмо автору
 
   для: kasmanaft   (28.10.2006 в 13:11)
 

Так, действительно, что-то я прокосячил и составил выражение как-то не так. Вот что получилось:


<html>
<head>
<title>регэкспы</title>
<script language="JavaScript"> 
var d=document; 
function get_links()    { 
var test_text=d.all.text.innerHTML; 
var reg=/:{2}\[(\d+)=\"(\w+\.\w{2,7})\"\].*?:{2}/g;
var res=reg.exec(test_text); 
alert(res); 

</script> 
</head> 
<body onload="get_links();"> 
<div id="text"> 
<h1>Заголовок</h1> 
<p>Текст, из которого мне нужно вытащить некие ::[12="smth.html"]подстроки:: и вернуть их без фактических ::[3="adresa.html"]адресов::</p> 
</div> 
</body> 


Фишка в том, что верно находится и выводится только первое совпадение. Как мне сделать так, чтобы выводилось еще и второе и третье и т.д.? Почему-то модификатор "g" не влияет ни на что... Кстати, для меня новостью было, что русские буквы не подпадают под "\w" :-0 Интересно, почему... Пришлось ставить *. Ну, возможно, это даже лучше...

Подсобите пожалуйста вытащить другие эелементы...

   
 
 автор: kasmanaft   (28.10.2006 в 13:11)   письмо автору
 
   для: SHAman   (28.10.2006 в 12:28)
 

> Вряд ли. Что опасного может быть в регэкспах?
Это надо у IE спросить ... попробуйте ради эксперимента разбезопасить его.
У меня например выскакивает на верху, под адресной строкой сообщение "Чтобы помочь обеспечению безопасности IE ограничил ... " и соответственно ничего не работает....
Жму на него, разрешаю выполнение и сё работаить! :)

   
 
 автор: SHAman   (28.10.2006 в 12:28)   письмо автору
 
   для: kasmanaft   (27.10.2006 в 22:03)
 

Вряд ли. Что опасного может быть в регэкспах?

Кроме того, даже так: у меня сайт будущий рассчитан исключительно под ИЕ, в силу особенностей других браузеров. Например, опера странно реагирует на нажатие цифр в обычном режиме без установки курсора в поле ввода. А у меня клавиши цифр будут активно использоваться. Так что меня даже кроссбраузерность не интересует.

Но я хочу чтобы уж под ИЕ все работало как надо. Блин, неужели так трудно осуществить то, что я описал? Нужно всего лишь проверить текст на совпадения, запомнить куски из этих совпадений и заменить найденые совпадения на похожие. И это все. Неужели так сложно? Жопой чую - не сложно. Но как реализовать - не знаю. РегЭкспы использую в Перле, а в JS с ними странно работа организована. Не могу понять как...

Не хотелось бы обращаться на другой форум....:(

   
 
 автор: kasmanaft   (27.10.2006 в 22:03)   письмо автору
 
   для: SHAman   (27.10.2006 в 21:48)
 

Может быть дело с настройками безопасности браузера?
Что нить типа "Чтобы помочь обеспечению безопасности IE ограничил ... " ??

   

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования