关于正则
读文:https://juejin.cn/post/6844903845227659271 (opens in a new tab)
对于正则的入门讲解,挺好,做个摘录
先看下最后他给的一道题:在最后,出个常用的正则面试题吧:请写出一个正则来处理数字千分位,如12345
替换为12,345
。请尝试自己推理演绎得出答案,而不是依靠搜索引擎:)。
尝试解答:(自测看没问题)
const exg = /(?<=\d)(\d{3}[^\d])/g;
// res:
// const s = '这时候,需要把数字 123123 变成千分位123大发啊是短发 432432车234234,1大发发呆3'
// console.log(s.replace(exg, ',$1'));
// 这时候,需要把数字 123,123 变成千分位123大发啊是短发 432,432车234,234,1大发发呆3
进入正文
正则可视化网站 regexper.com (opens in a new tab),挺好用的,和 https://ihateregex.io/ (opens in a new tab) 这个网站里面的可视化差不多。
简单记下重点,详细的看文
正则表达式到底是什么
字符串模式匹配
而它的底层原理也十分简单,就是使用状态机的思想进行模式匹配(并不能理解)
字符
循环与重复
位置边界
单词边界 | \b | boundary |
---|---|---|
非单词边界 | \B | not boundary |
子表达式
分组:()
回溯引用:
- 保留替换匹配项
$1
$2
... 仿佛变量
var str = "abc abc 123";
str.replace(/(ab)c/g, "$1g");
// 得到结果 'abg abg 123'
前向查找(前:阅读顺序):正查找 (?=)
,负查找 (?!)
后向查找:正查找 (?<=)
,负查找 (?<!)