function html2bbcode(str) { if(forumallowhtml || (allowhtml && fetchCheckbox('htmlon')) || trim(str) == '') {
str = str.replace(/<img[^>]+smilieid=(["']?)(\d+)(\1)[^>]*>/ig, function($1, $2, $3) {return smilies[$3]['code'];});
str = str.replace(/<img([^>]*aid=[^>]*)>/ig, function($1, $2) {return imgtag($2);});
return str;
} str= str.replace(/\s*\[code\]([\s\S]+?)\[\/code\]\s*/ig, function($1, $2) {return codetag($2);}); str = preg_replace(['<style.*?>[\\\s\\\S]*?<\/style>', '<script.*?>[\\\s\\\S]*?<\/script>', '<noscript.*?>[\\\s\\\S]*?<\/noscript>', '<select.*?>[\s\S]*?<\/select>', '<object.*?>[\s\S]*?<\/object>', '<!--[\\\s\\\S]*?-->', ' on[a-zA-Z]{3,16}\\\s?=\\\s?"[\\\s\\\S]*?"'], '', str); str= str.replace(/(\r\n|\n|\r)/ig, ''); str= trim(str.replace(/&((#(32|127|160|173))|shy|nbsp);/ig, ' ')); if(!fetchCheckbox('parseurloff')) {
str = parseurl(str, 'bbcode', false);
} str = str.replace(/<br\s+?style=(["']?)clear: both;?(\1)[^\>]*>/ig, '');
str = str.replace(/<br[^\>]*>/ig, "\n"); if(!fetchCheckbox('bbcodeoff') && allowbbcode) {
str = preg_replace(['<table([^>]*(width|background|background-color|bgcolor)[^>]*)>', '<table[^>]*>', '<tr[^>]*(?:background|background-color|bgcolor)[:=]\\\s*(["\']?)([\(\)%,#\\\w]+)(\\1)[^>]*>', '<tr[^>]*>', '<t[dh]([^>]*(width|colspan|rowspan)[^>]*)>', '<t[dh][^>]*>', '<\/t[dh]>', '<\/tr>', '<\/table>'], [function($1, $2) {return tabletag($2);}, '[table]', function($1, $2, $3) {return '[tr=' + $3 + ']';}, '[tr]', function($1, $2) {return tdtag($2);}, '[td]', '[/td]', '[/tr]', '[/table]'], str); str = str.replace(/<h([0-9]+)[^>]*>(.*)<\/h\\1>/ig, "[size=$1]$2[/size]\n\n");
str = str.replace(/<img[^>]+smilieid=(["']?)(\d+)(\1)[^>]*>/ig, function($1, $2, $3) {return smilies[$3]['code'];});
str = str.replace(/<img([^>]*src[^>]*)>/ig, function($1, $2) {return imgtag($2);});
str = str.replace(/<a\s+?name=(["']?)(.+?)(\1)[\s\S]*?>([\s\S]*?)<\/a>/ig, '$4'); str = recursion('b', str, 'simpletag', 'b');
str = recursion('strong', str, 'simpletag', 'b');
str = recursion('i', str, 'simpletag', 'i');
str = recursion('em', str, 'simpletag', 'i');
str = recursion('u', str, 'simpletag', 'u');
str = recursion('a', str, 'atag');
str = recursion('font', str, 'fonttag');
str = recursion('blockquote', str, 'simpletag', 'indent');
str = recursion('ol', str, 'listtag');
str = recursion('ul', str, 'listtag');
str = recursion('div', str, 'dpstag');
str = recursion('p', str, 'dpstag');
str = recursion('span', str, 'dpstag');
} str = str.replace(/<[\/\!]*?[^<>]*?>/ig, ''); for(var i = 0; i <= codecount; i++) {
str = str.replace("[\tDISCUZ_CODE_" + i + "\t]", codehtml[i]);
} return preg_replace(['&nbsp;', '&lt;', '&gt;', '&amp;'], [' ', '<', '>', '&'], str);
}

解决方案 »

  1.   

    以上是部分源码,以下是问题:str = str.replace(/ <img[^>]+smilieid=(["']?)(\d+)(\1)[^>]*>/ig, function($1, $2, $3) {return smilies[$3]['code'];}); 
    1、以上代码后面有个函数,里面有三个参加,但好像函数体里面只用到了一个参数,那$1、$2有什么用了,为什么还写在上面呢。
    2、还是上面的代码,['code']这个表示什么?有什么作用?
    3、smilies[$3]['code']  这个代码是什么意思?有什么作用?str = recursion('b', str, 'simpletag', 'b'); 
    1、这句话代表什么意思?
    因为我不懂JS,我现在要把以上代码转写成别的代码,所以先理解,再写代码。呵。
      

  2.   

    smilieid??大概是表情类的东西,smilies这个不知是什么??看来你要贴全部代码了,不过通常像这类正规化的js,都很阅读的,都几个文件几个文件的关联起来,,
    $1是对整个字符中的引用(这好像和其它正则表达式不一样啊),那么$3就是第二个括号内的值--也就是一个数字id值,,.............
      

  3.   

    忘说了,javascript 的replace 的 $1,$2,$3,这个可以随便的,如果想取到 第二个括号内的值,必须在function($1,$2,$3)里写上3个参数,,
    事实上你也可以写成($0,$1,$2)  或者 ($6,$7,$8)... 反正第一个$就表示匹配的整个表达式,第二$表示第一个括号,所以函数那里写了三个值,却只用了最后一个,
      

  4.   

    hotup 兄弟,你搞错了吧。$1、$2、$3、$4这个都是指的括号里面的匹配,而且如果要第二个括号里面的值就直接$2就行了,不用加前面的$1吧。嘿嘿。。