Зачем Insert? Можно просто дописать в конец. Что-то вроде
Код:
Count := 1;
cPos := 1;
Pos1:=PosEx('<', Data,1);
Result := '';
while Pos1 > 0 do
begin
DefineTeg:=Copy(Data, Pos1, 10); (*копируем первые 11 символов с позиции первого вхождения*)
TegEnd:=PosEx(' ',DefineTeg,1); (*позиция первого пробела *)
if TegEnd = 0 then (*если пробела нет ищем >*)
TegEnd:=PosEx('>',DefineTeg,1); (*позиция первого >*)
if TegEnd = 0 then
break;
Pattern:=Copy(DefineTeg, 1, (TegEnd-1)); (*выделяем паттерн тега*)
// можно и так, а можно
// SetLength(DefineTag, TegEnd - 1);
// и юзать DefineTag
if Pattern = '<script' then
begin
Result := Result + Copy(Data, Count, Pos1 - Count);
Count := PosEx('</script>', Data, Pos1 + 7) + 9;
cPos1 := Count;
end
else
cPos1 := Pos1 + 1;
Pos1:=PosEx('<', Data,cPos);
end;
Result := Result + Copy(Data, Count, Length(Result) - Count);
ЗЫЖ не тестил, писал "на коленке", могут быть и ошибки.
Хотя вообще странно, что твой вариант медленнее. В таком случае может быть медленнее и тут. По идеи PosEx = rep scasb, одна команда; в то время как прибавление по одному символу - постоянные релоки строки.