Wikipedia:AutoEd/htmltowikitext.js#L-18

//Convert HTML to wikitext

function autoEdHTMLtoWikitext(str) {

// and tags

str = str.replace(/((?:[^<>]|<[a-z][^<>]*\/>|<([a-z]+)(?:| [^<>]*)>[^<>]*<\/\3>)*?)<\/\1[ ]*>/gi, "$1");

str = str.replace(/((?:[^<>]|<[a-z][^<>]*\/>|<([a-z]+)(?:| [^<>]*)>[^<>]*<\/\3>)*?)<\/\1[ ]*>/gi, "$1");

//
, <\br>, ,
, ...

str = str.replace(/<[\\\/]+BR[\\\/\s]*>/gim, '
');

str = str.replace(/<[\\\/\s]*BR[\s]*[\\\/]+[\s]*>/gim, '
');

// <.br>, ,
, ...

str = str.replace(/<[\s\.]*BR[\s\.]*>/gim, '
');

//
>, <
, <
> ...

str = str.replace(/<[\s]*()/gim, '$1');

str = str.replace(/()[\s]*>/gim, '$1');

//


str = str.replace(/([\r\n])[\t ]*<[\\\/\. ]*HR[\\\/\. ]*>/gi, '$1----');

// str = str.replace(/(.)<[\\\/\. ]*HR[\\\/\. ]*>/gi, '$1\n----'); // Breaks wikitables

// Repeated references tag

str = str.replace(/()[\s]*\1/gim, '$1');

// Make sure

, ...,

is after a newline

str = str.replace(/([^\r\n ])[\t ]*(]*>)/gim, '$1\n$2');

// Make sure

, ..., is before a newline

str = str.replace(/(<\/H[1-6][^<>]*>)[\t ]*([^\r\n ])/gim, '$1\n$2');

// Remove newlines from inside

, ...,

var loopcount = 0;

while( str.search( /]*>(?:[^<>]|<\/?[^\/h\r\n][^<>]*>)*?<\/H\1[^<>]*>/gim ) >= 0 && loopcount <= 10 ) {

str = str.replace(/(]*>(?:[^<>]|<\/?[^\/h\r\n][^<>]*>)*?)[\r\n]((?:[^<>]|<\/?[^\/h\r\n][^<>]*>)*?<\/H)\2([^<>]*>)/gim, '$1$2$3 $4$2$5');

loopcount++;

}

// Replace

, ...,

with wikified section headings

str = str.replace(/(^|[\r\n])[\t ]*]*>([^\r\n]*?)<\/H1[\r\n\t ]*>[\t ]*([\r\n]|$)/gim, '$1=$2=$3');

str = str.replace(/(^|[\r\n])[\t ]*]*>([^\r\n]*?)<\/H2[\r\n\t ]*>[\t ]*([\r\n]|$)/gim, '$1==$2==$3');

str = str.replace(/(^|[\r\n])[\t ]*]*>([^\r\n]*?)<\/H3[\r\n\t ]*>[\t ]*([\r\n]|$)/gim, '$1===$2===$3');

str = str.replace(/(^|[\r\n])[\t ]*]*>([^\r\n]*?)<\/H4[\r\n\t ]*>[\t ]*([\r\n]|$)/gim, '$1====$2====$3');

str = str.replace(/(^|[\r\n])[\t ]*]*>([^\r\n]*?)<\/H5[\r\n\t ]*>[\t ]*([\r\n]|$)/gim, '$1=====$2=====$3');

str = str.replace(/(^|[\r\n])[\t ]*]*>([^\r\n]*?)<\/H6[\r\n\t ]*>[\t ]*([\r\n]|$)/gim, '$1======$2======$3');

return str;

}