Гораздо быстрее было бы что-нибудь вроде
Код:
i := 1;
while i < Length(s) do
begin
if (i < Length(s) - 7) and (s[i] = '<') then
begin
if s.SubStr(i + 1, 6) = 'script' then
begin
j := PosEx('>', s, i + 7);
if j > 0 then
begin
j := PosEx('</script>', s, j + 1);
if j > 0 then
i := j + 8
else
buf := buf + s[i];
end
else
buf := buf + s[i];
end;
end
else
buf := buf + s[i];
i := i + 1;
end;
Может в цифрах ошибся, но суть ясна.
А разбирать код, который был оформлен как будто под кайфом, нет желания.