案例1: 将下划线命名批量改成小驼峰命名
场景
Sql字段通常下划线命名,Java的dto通常小驼峰命名。示例如下:1
2
3hello_world
转换为
helloWorld
旨在实现如下校验目标:
- 若 “_小写字母”,则替换为“大写字母”
方法
1.若 “_小写字母”,则替换为“大写字母”
- 遍历欲替换的字符串列表
- 对每一项字符串替换
1 | const source=[ |
2.将字符串/变量替换为abc
1 | const str = str.replace(new RegExp(name, 'gm'), 'abc'); // 全局替换 |
正则整理
- 获取正则匹配值并替换: str.replace(regex, function(word){ });
- word 即为 正则匹配值
- js中没有replaceAll方法,要想全局替换,可借助正则表达式
案例2: “伪SQL表达式”简单校验
场景
如下” 伪SQL表达式”,其中,数字序号代表具体的表达式(eg. name = 20),and or 小括号等是sql语句常用连接符。
1 | 1 and 2 and (3 or 4) and (5 or 6 or 7) |
旨在实现如下校验目标:
- 小括号配对校验
- 将所有数字取出
附探讨目标:最初设计“伪SQL表达式”如下,以#num代表具体表达式。(毫无必要,已废弃)
1 | #1 and #2 and (#3 or #4) and (#5 or #6 or #7) |
探讨目标:
- #号后面必须紧跟数字
- 数字之前必须有#号
方法
1.取出所有数字
1 | const patten = /\d+/g; |
3.#号后面必须紧跟数字
1 | const patten = /#\D+/; |
4.数字之前必须有#号
1 | const patten = /#?(?=\d+)\d+/g; |
2.校验小括号是否配对
- 准备一个栈结构
- 遍历字符串中所有字符
- 如果字符为左括号,则字符入栈
- 如果字符为右括号,则出栈
- 如果出栈字符为空,则说明该右括号无左括号对应,返回false
- 如果出栈字符与右括号所对应的左括号不一致,则说明右括号对应左括号出错,返回false
- 如果遍历完成后,栈的长度非空,则说明左右括号不一一配对,返回false
1 | // 栈 |
正则整理
- 全局匹配数字: /\d+/g
- 全局匹配“数字、#数字两种类型” : /#?(?=\d+)\d+/g
- (?=\d+) 获取数字前的位置Pos
- #? 位置Pos前有“0或1个#号”
- \d+ 位置Pos后有数字
- “特殊符号#后不是数字”:/#\D+/
- 获取字符串内指定值,或正则表达式匹配值: str.match(regex / searchvalue)
- 检测字符串是否匹配正则模式: regex.test(str)