существование опережающей проверки рег выражения javascript

sniper_9

Новичок
существование опережающей проверки рег выражения javascript

Всем привет. Можно ли реализовать опережающую проверку в рег выражениях, но только на яваскрипте, а не php?
Мне надо реализовать замену искомого текста на другой при этом, чтбоы искомое слово не являлось тегом. В статье прочитал, что этого можно добиться с помощью опережающей проверки в частности.
После долгих потугов получилось $pattern = "/(?<!<)[a-z\s\"]+elephant[a-z\s\"]+(?!>)/";
И как ее прикрутиьт в яваскрипт?

var pattern = "/(?<!<)[a-z\s\"]+elephant[a-z\s\"]+(?!>)/";
document.body.innerHTML = document.body.innerHTML.replace(pattern, "!!!");

Как быть?
 

DiMA

php.spb.ru
Команда форума
Точно не знаю, не читал, но по очучениям в яве используется аналог ereg, а не preg. Разумеется в таком случае никаких фишек от прега не будет и помине.
 

sniper_9

Новичок
1.то есть как я понял надо тогда использовать объект regexp
"и в качестве второго аргумента использовать callback , с проверкой в нем на наличие < в первой подмаске?
"
вот это не понял уже
 

sniper_9

Новичок
в качестве второго параметра идет строка, которой мы заменяем ведь так?
"с проверкой в нем на наличие < в первой подмаске?
"
пожалуйста можно подробней. все таки ещё не очень силен в регулярках.
 

BRat

o_0
блин. Если в первой подмаске будет "<", значит это тег и его обрабатывать не надо. Попытайся разобраться в той регулярке, что я написал. И почитай ссылку, там есть примеры использования.
 

sniper_9

Новичок
ура!!! после бессонной ночи за изучением регулярок все таки родил:


$pattern = "/(<)*?[a-z\s\"=]*abc[a-z\s\"=]*(?!> )/";

function change($a_data)
{
if ("<" <> $a_data[1])
{
$a_data[0] = preg_replace("/abc/","!!!",$a_data[0]);
}
return $a_data[0];
}


echo $text;

echo "\n\n\n";

echo preg_replace_callback($pattern,"change",$text);


вот как то так)



если можно , то вопрос сюда про регулярки:

в яваскрипте маска поиска подается типа object, а мне надо ее динамически генерить. как маску из типа string перевести в нужный тип для replace функции?



var pattern = "/(<)*?[a-z\s\"=]*abc[a-z\s\"=]*(?!>)/g"; //если хочешь по всему тексту проверить

re=new RegExp(pattern);

document.body.innerHTML = document.body.innerHTML.replace(re,change);

Так пробую, но увы: съедает символ "<" в начале строки. Как быть?
 

sniper_9

Новичок
function change(str)
{
alert(str);
if ('<' != str.substr(0,1))
str = str.replace(/yamaha/,"!!!");



return str;
}


Html_document.get_parameters = function()
{
// var pattern = /(<)*?[a-z\s\"=]*abc[a-z\s\"=]*(?!>)/;
var re = /(<)*?[a-z\s\"=]*yamaha[a-z\s\"=]*(?!>)/g;

document.body.innerHTML = document.body.innerHTML.replace(re,change); //вызов функции change()
}

-~{}~ 30.01.09 15:21:

Если использую regexp, то заменяю на:

var re=new RegExp(pattern); //вот так - нет, но это единственный вариант в случае динамической генерации шаблона
 

BRat

o_0
ну даже не знаю чем помочь. Смотри alert-ами что происходит, и кто кого сьедает
 
Сверху