Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Коварные RegExp'ы (https://javascript.ru/forum/css-html/9331-kovarnye-regexp%27y.html)

goldmember 11.05.2010 15:27

Коварные RegExp'ы
 
Неужто результат выполнения регулярного выражения зависит от браузера? Например, мне нужно удалить все тэги в строке кроме тэга <br>
, делаю
var reg=/<\/?([^<(br)>]+)>/g;
	var result=obj.innerHTML.replace(reg,'');
Аппле(сафари) и лиса хавают, а осёл с оперой не интересует условие 'кроме', они все тэги удаляют. Мож. я пишу не стандартно или как?

Kolyaj 11.05.2010 15:41

Во-первых, "условие 'кроме'" у вас бредовое какое-то, читайте про символьные классы. Во-вторых, результат выполнения RegExp'а от браузера не зависит (кроме некоторых мелочей), а вот содержимое innerHTML в разных браузерах разное.

goldmember 11.05.2010 15:52

Содержимое innerHTML не отличается, а как тогда этот бред вообще работает? Я так понимаю, бред вы увидели в том, что в этом условии подпаттерн присутствует? Ну хорошо, а наводку дать можете как сие реализуется?

Kolyaj 11.05.2010 16:01

Цитата:

Сообщение от goldmember
в этом условии подпаттерн присутствует?

В символьном классе не может быть подпаттернов.

Цитата:

Сообщение от goldmember
Содержимое innerHTML не отличается

Проверяли?

Цитата:

Сообщение от goldmember
а наводку дать можете как сие реализуется?

С помощью функции замены.

goldmember 11.05.2010 16:18

А вот и работает моя конструкция...Только надо было innerHTML.toLowerCase().replace делать, такая вот фича

Kolyaj 11.05.2010 16:57

Цитата:

Сообщение от goldmember
А вот и работает моя конструкция...

var reg=/<\/?([^<(br)>]+)>/g;
    alert('<p>asdfasdf</p> <br> <b>asfaf</b> <strong>adfadfad </strong>'.replace(reg,''));

goldmember 11.05.2010 17:12

Ну ХЗ, мою проблему решает, а с функциями замены я покаместне разобрался

Riim 12.05.2010 01:07

var t = '<div></div>fd<p>gdfg<br>dfgdfg<br />fdgdf</p>gd'.replace(/<\/?([^>]+)>/gi, function($1, $2) {
	return $2.toLowerCase().indexOf('br') ? '' : $1;
});

alert(t);

e1f 13.05.2010 14:27

var t = '<div></div>fd<p>gdfg<br>dfgdfg<br />fdgdf</p>gd'.replace(/<\/?([^>]+)>/gi, function($1, $2) {
    return $2.toLowerCase().indexOf('br') *!*!= -1*/!* ? '' : $1;
});
 
alert(t);

Riim 13.05.2010 16:39

e1f,
Цитата:

Сообщение от goldmember
удалить все тэги в строке кроме тэга <br>



Часовой пояс GMT +3, время: 14:27.