var emoticons = [
   { name: "微笑", icon: "App_Themes/Default/images/emoticons/0.gif" },
   { name: "呲牙", icon: "App_Themes/Default/images/emoticons/1.gif" }
];var str = "[微笑[呲牙]";str.replace(/\[[^\]]+?\]/g, function (word) {
    var name = word.substring(1, word.length - 1);
    for (var i = 0; i < emoticons.length; i++) {
        if (name == emoticons[i].name) 
            return "<img src='" + emoticons[i].icon + "' />";
    }
    return word;
});// 返回的字符串是:[微笑[呲牙]   没有替换后面的[呲牙]
// 想要的效果是:[微笑<img src='App_Themes/Default/images/emoticons/1.gif' />
我想把中括号和里面对内容替换成对应的img标签,正常的话,这个正则可以。。比如:[微笑][呲牙]
但是如果像上面那样,少了半边括号,就不行了。前面少了半边括号不替换,但是后面的[呲牙]也没替换。求指点正则JavaScript字符串

解决方案 »

  1.   


    var emoticons = [
       { name: "微笑", icon: "App_Themes/Default/images/emoticons/0.gif" },
       { name: "呲牙", icon: "App_Themes/Default/images/emoticons/1.gif" }
    ];
     
    var str = "[微笑[呲牙]";
     
    str.replace(/\[([^\]\[]+?)\]/g, function(a, b) {
        for (var i = 0; i < emoticons.length; i++) {
            if (b == emoticons[i].name) return "<img src='" + emoticons[i].icon + "' />";
        }
        return a;
    });