关于正则

读文: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) 这个网站里面的可视化差不多。

简单记下重点,详细的看文

正则表达式到底是什么

字符串模式匹配

而它的底层原理也十分简单,就是使用状态机的思想进行模式匹配(并不能理解)

字符

循环与重复

位置边界

单词边界\bboundary
非单词边界\Bnot boundary

子表达式

分组:()

回溯引用:

  • 保留替换匹配项 $1 $2... 仿佛变量
var str = "abc abc 123";
str.replace(/(ab)c/g, "$1g");
// 得到结果 'abg abg 123'

前向查找(前:阅读顺序):正查找 (?=),负查找 (?!)

后向查找:正查找 (?<=),负查找 (?<!)