正则表达式匹配代码块的注释

使用正则内部的逻辑短路匹配之一举多得 用多分支来排除,向if-else那样不用写出完全的条件。
小而广的条件有时不仅能匹配到最终目标,而且还能锦上添花(一举多得):
regexp = /str|regexp|lineannotaion|blockannotation|tampstring/g

let tmp='', str = ` ${tmp+'\`'+"${}"+ `${tmp}`+ /*A*/ (tmp={'a':/(? & //e /*f*/`,//g reg = /(?

匹配任意字符
/[\s\S]/g /[^]/g

匹配单行注释
/\/\/.*/g

匹配多行注释
/\/\*[^]*?\*\//g

匹配字符串
/('|"|`)[^]*?(?

字符串模板${}内部可能还会出现字符串模板和正则表达式内存在未转义的\`
书写简单的字符串模板时使用第二个正则表达式应该是没大问题的
匹配正则表达式
/\/.*?[^\\]\//g

【正则表达式匹配代码块的注释】替换需要转义的字符
.replace(/&|<|\u00a0/g,m=> m=='&' ? "& " : m=='<' ? "<" : /\u00a0/.test(m) ? ' ' : m )

基本实现
CODE_JAVASCRIPT .replace(/&|<|\u00a0/g,m=> // 匹配需要转义的HTML符号 m=='&' ? "& " : m=='<' ? "<" : /\u00a0/.test(m) ? ' ' : m ) .replace( // /\/\/.*|\/\*[^]*?\*\/|''|``|""|('|"|`)[^]*?[^\\]\1|\/.*?[^\\]\//g, // ${}内部不能再嵌套模板字符串,内部使用正则时要转义`,像这样 ${"helo".match(/\`/)[0]} /\/\/.*|\/\*[^]*?\*\/|\/.*?[^\\]\/|''|""|('|")[^]*?[^\\]\1|`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/g, (m,a,b,c,d,e,f,g)=>{// return /\/\*|\/\//.test(m.slice(0, 2)) return m.slice(0,2) == "//" ||m.slice(0,2) == "/*"// ? (!b || /\r|\n/.test(c[b-1]) ? ""+m+"" : ""+m+"") ? ""+m+"" : m })

测试版
CL Testy

.annotation{background:#62a562} .annotation-sub{background:#ccc} .char{background:skyblue} .string{background:rgb(172, 134, 172)} .blockstr{background:orange} .regexp{background:pink}

测试的js和md文件
let tmp='', str = ` ${tmp+'\`'+"${}"+ `${tmp}`+ /*A*/ (tmp={'a':/(? & //e /*f*/`,//g reg = /(?

    推荐阅读