小编Fab*_*071的帖子

获取在HTML字符串中包含Tag的属性

我正在开发一个简单的文本屏幕/终端模拟器(类似于JQuery终端插件,但没有RPC的东西和窗口功能).屏幕的每一行都是一个表格行(HTML字符串),并且打印命令可以插入带有一些属性(例如前景色和背景色)的文本.每个打印的文本都包含带有样式属性的跨度,例如:

<span style="color:#000000;background-color:#111111">A</span><span style="color:#222222;background-color:#333333>BC</span>
Run Code Online (Sandbox Code Playgroud)

这很好用.现在我想添加一个函数,它给出了给定屏幕位置的字符的所有属性,在上面的行中,位置0(A)的字符具有颜色#000000.所以我必须计算不属于span标签的字符,并获得最后的样式.我的第一个容易出错的解决方案是:

function getAttr(line, position) {
    var result = {foreground:'', background:''},
        ch = '', i, j = -1, tag = false;

    // Count characters
    for (i = 0; i < line.length && j < position; i++) {
        ch = line.charAt(i);

        if (ch == '<') {
            tag = true;
        }

        if (ch == '>') {
            tag = false;
        }
        else if (!tag) {
            j++;
        }
    }

    i--;

    // Find styles
    while (i > 0 && line.charAt(i) != '<') …
Run Code Online (Sandbox Code Playgroud)

javascript string screen

5
推荐指数
1
解决办法
108
查看次数

Perl:用于条件替换的正则表达式吗?

在这个字符串中

ab<(CN)cdXYlm<(CI)efgXYop<(CN)zXYklmn<(CI)efgXYuvw<
Run Code Online (Sandbox Code Playgroud)

我想,以取代之间的每个子XY以及<由一个或两个取决于以前的括号字符:

如果XY(CN)将子字符串替换为之后ONE

如果XY(CI)将子字符串替换为之后TWO

因此结果应为:

ab<(CN)cdONE<(CI)efgTWO<(CN)zONE<(CI)efgTWO<
Run Code Online (Sandbox Code Playgroud)

XY并且后面的字符应该被替换,而不是尖括号<

这是用于修改HTML和任意字符之间可以发生XY<。我想我需要两个正则表达式用于(CN)和(CI)。

# This one replaces just all XY:   
my $s = 'ab<(CN)cdXYlm<(CI)efgXYop<(CN)zXYklmn<(CI)efgXYuvw<';
$s =~ s/(XY(.*?))</ONE/g;    
# But how to add the conditions to the regex?
Run Code Online (Sandbox Code Playgroud)

regex perl

2
推荐指数
1
解决办法
84
查看次数

标签 统计

javascript ×1

perl ×1

regex ×1

screen ×1

string ×1