Удаление тегов из строки - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь переделать скрипт ниже, чтобы он не рисовал текст без тегов [a=...] и [/a], а просто удалил их из строки.

Я сделал этот скрипт, но онудаляет все внутри тегов, удаляет их между тегом и между двумя тегами [a = ...] ... [/ a].

var xx, yy, str, st, et, ct, l, h, stl, pc, dx, dy, dp, p, c, ds, i;

str = argument0;
st = '[c=';
et = ']';
ct = '[/c]';

l = string_length(str);
h = string_height(' ');
stl = string_length(st);
dp = 1;

result = "";

for (p = 1; p <= l; p += 1) {
    c = string_char_at(str, p);
    if (c == chr(10) || p == l || (c == '#' && string_char_at(str, p - 1) != '\')) {
        result = (string_copy(str, dp, p - dp + 1));
        dp = p + 1;
    } else if (c == string_char_at(st, 1) || c == string_char_at(ct, 1)) {
        if (p + string_length(st) <= l && string_copy(str, p, string_length(st)) == st) {
            ds = string_copy(str, dp, p - dp);
            string_insert(ds, result, dp);
            i = string_copy(str, p + stl, string_pos(et, string_delete(str, 1, p + stl)));
            p += string_length(i + et + st) - 1;
            dp = p + 1;
        } else if (p + string_length(st) <= l && string_copy(str, p, string_length(ct)) == ct) {
            ds = string_copy(str, dp, p - dp);
            string_insert(ds, result, dp);
            p += string_length(ct) - 1;
            dp = p + 1;
        }
    }
}
return (result);

Мой скрипт должен удалять теги из строки, не удаляястрока внутри тегов.

код:

привет, это [a = 1] альфа-тег [/ a]!

результат:

привет, это альфа-тег!

1 Ответ

1 голос
/ 11 мая 2019

Можно покончить с кучей string_pos и string_copy / string_delete

var s = argument0;
var st = '[a=',  stl = string_length(st) - 1;
var et = ']',    etl = string_length(et) - 1;
for (var p = string_pos(st, s); p != 0; p = string_pos(st, s)) {
    // suppose "ab[a=1]cd[/a]ef"
    var s0 = string_copy(s, 1, p - 1); // "ab"
    var s1 = string_delete(s, 1, p + stl); // "1]cd[/a]ef"
    p = string_pos(et, s1);
    s = s0 + string_delete(s1, 1, p + etl); // "cd[/a]ef"
}
s = string_replace_all(s, '[/a]', '');
return s;
...