代码之家  ›  专栏  ›  技术社区  ›  james emanon

使用HTML模板字符串和Regex'ing动态值。卡在正则表达式上

  •  0
  • james emanon  · 技术社区  · 14 年前

    我被卡住了。也许使用正则表达式有更好的方法(喜欢听听你的想法)。

    作为一个ONE-OFF,如果我只是在一件事上做替补,比如说——链接——以下是有效的。

    var testHtmlStr = '<tr>' +
                    '<td class="eve"><div class="pad" style="overflow:hidden;">' +
                      '<a href="#" class="pic"><img height="50" width="80" title="{%desc%}" alt="{%desc%}" src="{%image%}"></a>' +
                      '<div class="sum"><a href="{%link%}" class="url">{%name%}</a></div>' +
                      '{%star_rating_html%}' +
                      '<a href="#" class="gray">{%eventC%}</a>' +
                      '<span class="block">{%evenC%}</span>' +
                    '</div></td>' +
                    '<td class="mor"><div class="pad"><a class="mor" href="{%link%}">{%linkName%}</a>' +
                    '</div></td>' +
                  '</tr>';
    var ss = 'link';
    var syntax = new RegExp('(^|.|\r|\n)(\{%\s*(' + ss + ')\s*%\})',"gi");
    
     alert(testHtmlStr.replace(syntax, '$1TESTESTESTESTS'));
    

    以下是我的代码,它不起作用。我不明白为什么。相同的正则表达式,相同的html模板模式。此外,my.each通过字符串重复,但似乎在每次重复后,字符串都会返回到未修改的状态。基本上,无论html字符串是什么样的so{%somehashkey%},我都希望用相应的哈希值来替换它。 我以为我的代码会起作用,却搞不清哪里出了问题。我知道有些事情很奇怪。我找不到它。你的想法?

    (function($){
    var testHTML2 = '<tr>' +
                    '<td class="eve"><div class="pad" style="overflow:hidden;">' +
                      '<a href="#" class="pic"><img height="50" width="80" title="{%desc%}" alt="{%desc%}" src="{%image%}"></a>' +
                      '<div class="sum"><a href="{%link%}" class="url">{%name%}</a></div>' +
                      '{%rating%}' +
                      '<a href="#" class="gray">{%eventC%}</a>' +
                      '<span class="block">{%evenC%}</span>' +
                    '</div></td>' +
                    '<td class="mor"><div class="pad"><a class="mor" href="{%link%}">{%linkName%}</a>' +
                    '</div></td>' +
                  '</tr>';
    
    var type = "yahoo";
    var disp = {};
    disp.eventC = '5';
    disp.rating = "<div>rating here</div>";
    switch (type) {
    case 'yahoo':
        disp.link = 'http://www.yahoo.com';
        disp.image = 'SOMe IMAGE' ;
        disp.name = "VENICE BEACH";
        disp.desc = 'MORE INFO&nbsp;';
        disp.linkName = 'YAHOO';
    break;
    default:
        disp.link = 'http://www.google.com';
        disp.image = 'Some IMAGE';
        disp.name = "BABY BABY";
        disp.desc = 'MORE INFO&nbsp;YOYOYO';
        disp.linkName = 'GOOGLE';
    }
    
    $.each( disp, function(t, num){
    var syntax = new RegExp('(^|.|\r|\n)(\{%\s*(' + t + ')\s*%\})',"gi");
    testHTML2.replace(syntax, num)
    });
    alert(testHTML2);
    })(jQuery);
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   prashanth    14 年前

    您没有为testHTML2分配新值。

    testHTML2 = testHTML2.replace(syntax, num)