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

HTML+CSS+JavaScript

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Помогите, пожалуйста, составить регулярное выражение
 
 автор: Dimox   (04.01.2009 в 14:40)   письмо автору
 
 

Условие такое: если тег <code> содержит в себе параметр lang (<code lang="">) с любым и даже пустым значением, нужно заменить все угловые скобки на их ASCII-значения во всем коде, который расположен между тегами <code lang=""> и </code>.

Помогите, пожалуйста.

  Ответить  
 
 автор: xx77   (05.01.2009 в 00:50)   письмо автору
 
   для: Dimox   (04.01.2009 в 14:40)
 

интересная задачка ,
только например IE6 никак нельзя втолковать что пустой атрибут lang может быть вписанным в тег но с пустым значением.

и если извлекать innerHTML тегов code , то никаких угловых скобок там не будет, будет &lt;&gt;
<html>
<head>
<script language="javascript">
function code_r(){ //
 var txt;
 var x = document.getElementsByTagName('CODE');
 
 for (var i=0; i< x.length; i++) {
 
 if (x[i].attributes.lang && x[i].attributes.lang.value != "") {
  txt = x[i].innerHTML.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/[<>]/g,   function(c){
     return c.charCodeAt();
    } );
    x[i].innerHTML = txt;
   }
 }
}
</script>
</head>
<body onload="code_r()">
<code lang="ru" style="border:solid 2px red">
<<<<<<<<<<<<,>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..
</code>
<code style="border:solid 2px green">
<<<<<<<<<<<<
</code>
<br><br><br><br><br><br>
</body></html>

  Ответить  
 
 автор: Dimox   (06.01.2009 в 19:37)   письмо автору
 
   для: xx77   (05.01.2009 в 00:50)
 

Похоже, что я неправильно изложил суть задачи. Попробую по-другому.

Имеется переменная, допустим, comment, которая содержит в себе вот такой код:


<code>здесь <strong>какой-то</strong> код</code>
<code lang="">здесь <strong>какой-то</strong> код</code>


Нужно в содержимом нашей переменной comment сделать замену в соответствии с условием, которое я написал в первом посте.

Уточнение: угловые скобки нужно заменить не на ASCII-код, а на HTML-символы, т.е. &lt; и &gt;.

  Ответить  
 
 автор: xx77   (07.01.2009 в 00:51)   письмо автору
 
   для: Dimox   (06.01.2009 в 19:37)
 

Оказалось и правда выражения в javascript намного продвинутее , чем я где-то здесь написал в одном из постов :)
<html>
<head>
<script language="javascript">
S = '<code style="border:solid 2px red" lang="">\n>>><<<<,>>>>\n>>>>>..\n</code>\n<code lang="">\n>>..\n</code>\n<code style="border:solid 2px green">>><<<>>>..\n</code>&lt;<>'
O = S.replace(/(<code[^>]*?\s+lang=[^>]*>)((?:[^<]*(?!<\/code).)*)/img, function(s0, s1, s2){ 
alert(s0);
alert(s1);
alert(s2);
return s1 + s2.replace(/</g, "&lt;").replace(/>/g, "&gt;"); });

alert(O)
</script>
</head>
<body>
<br><br><br><br><br><br>
</body></html>

Не понял только как сделать чтобы точка совпадала с переносами строк тоже
, и всётаки модификатора /e не помешало бы

  Ответить  
 
 автор: Dimox   (07.01.2009 в 15:36)   письмо автору
 
   для: xx77   (07.01.2009 в 00:51)
 

Большое спасибо! Это то, что нужно.

  Ответить  
Rambler's Top100
вверх

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