正则表达式匹配代码块的注释
使用正则内部的逻辑短路匹配之一举多得
用多分支来排除,向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 = /(?
推荐阅读
- Python标准库re的使用举例(正则化匹配)
- 投稿|性能与成本不相匹配,进入尴尬期的先进制程工艺又将何去何从?
- 深度学习|正则化方法笔记
- Django url 路由匹配过程
- 关于正则表达式中replace的第二个参数
- Java基础|Java8 -- Lambda表达式
- Sass的表达式和控制命令
- 20_表达式引擎|【java表达式引擎】四、高性能、轻量级的AviatorScript
- 机器学习|机器学习(七)过拟合问题与正则化
- 前端的正则表达式详解