|
|
|
|
|
для: 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, определенная в теле другой функции видна другим функциям? Или ее видит только родитель? | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(30.10.2006 в 18:52)
| | >Честно говоря, не дружу с javascript'ом ... но кое-что сообразил:
Я дружу, но не крепко... ;) в частности, регэкспы вообще не пользовал раньше в нем, а вот щас надо. Не хочется просто делать скрипт серверный ради такой мелочи.
----
Теперь вернемся к нашим баранам:
Основная задача, ради которой я брался вообще в этом копаться, звучит так:
- захватить все куски текста вида ...
- написать их без фактических адресов
- запомнить фактические адреса и цифры, чтобы потом использовать.
Найти - нашли, запомнить - запомнили, а вот убрать как? Там метод есть replace. Вот только как его юзать здесь - не совсем понятно. Надо обращаться к перемнным $n, а как это делать в JS? | |
|
|
|
|
|
|
|
для: 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, вместе с нулевыми элементами ... Но это уже что-то .. Отсюда уже можно плясать. | |
|
|
|
|
|
|
|
для: 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 Интересно, почему... Пришлось ставить *. Ну, возможно, это даже лучше...
Подсобите пожалуйста вытащить другие эелементы... | |
|
|
|
|
|
|
|
для: SHAman
(28.10.2006 в 12:28)
| | > Вряд ли. Что опасного может быть в регэкспах?
Это надо у IE спросить ... попробуйте ради эксперимента разбезопасить его.
У меня например выскакивает на верху, под адресной строкой сообщение "Чтобы помочь обеспечению безопасности IE ограничил ... " и соответственно ничего не работает....
Жму на него, разрешаю выполнение и сё работаить! :) | |
|
|
|
|
|
|
|
для: kasmanaft
(27.10.2006 в 22:03)
| | Вряд ли. Что опасного может быть в регэкспах?
Кроме того, даже так: у меня сайт будущий рассчитан исключительно под ИЕ, в силу особенностей других браузеров. Например, опера странно реагирует на нажатие цифр в обычном режиме без установки курсора в поле ввода. А у меня клавиши цифр будут активно использоваться. Так что меня даже кроссбраузерность не интересует.
Но я хочу чтобы уж под ИЕ все работало как надо. Блин, неужели так трудно осуществить то, что я описал? Нужно всего лишь проверить текст на совпадения, запомнить куски из этих совпадений и заменить найденые совпадения на похожие. И это все. Неужели так сложно? Жопой чую - не сложно. Но как реализовать - не знаю. РегЭкспы использую в Перле, а в JS с ними странно работа организована. Не могу понять как...
Не хотелось бы обращаться на другой форум....:( | |
|
|
|
|
|
|
|
для: SHAman
(27.10.2006 в 21:48)
| | Может быть дело с настройками безопасности браузера?
Что нить типа "Чтобы помочь обеспечению безопасности IE ограничил ... " ?? | |
|
|
|
|