前言
熟悉我的朋友可能会知道,我一向是不写热点的。为什么不写呢?是因为我不关注热点吗?其实也不是。有些事件我还是很关注的,也确实有不少想法和观点。 但我一直奉行一个原则,就是:要做有生命力的内容。
对于前端工程师来说, 正则表达式也许是javascript语言中最晦涩难懂的, 但是也往往是最简洁的.工作中遇到的很多问题,诸如搜索,查找, 高亮关键字等都可以使用正则轻松解决,所以有句话说的好:
正则用的好, 加班远离我.
今天笔者就复盘一下javascript正则表达式的一些使用技巧和高级API, 并通过几个实际的案例,来展现正则表达式的魅力.如果大家觉得正则表达式理解起来很麻烦,也可以使用如下在线网站, 只需要输入你的正则表达式, 它就能以图形的方式将你的正则展示出来:
你将收获
- 模式匹配的用法(x)
- 非捕获括号的模式匹配(?:x)
- 先行断言x(?=y)
- 后行断言(?<=y)x
- 正向否定查找x(?!y)
- 反向否定查找(?<!y)x
- 字符集合和反向字符集合的用法[xyz]/[^xyz]
- 词边界和非单词边界匹配/b/B
- 空白字符/非空白字符匹配/s/S
- 单字字符/非单字字符匹配/w/W
- 正则10大应用案例
正文
对于正则的基本用法笔者这里就不总结了,这里重点介绍一些比较有用且难懂的知识点.在最后笔者会写10个经典的正则案例, 供大家学习参考, 或者在工作中直接使用.
以上几点应用笔者在下文中会写几个例子来讲解.
模式匹配的用法(x)
模式匹配主要用来匹配某一类字符串并记住匹配项.
案例:
let str = 'xuxi is xuxi is'
let reg = /(xuxi) (is) 1 2/g
reg.test(str) // true (1)
str.replace(reg, '$1 $2') // xuxi is (2)
解释: 其中括号被称为捕获括号, 模式中的 1 和 2 表示第一个和第二个被捕获括号匹配的子字符串,即 xuxi 和 is,匹配了原字符串中的后两个单词, 因此(1)中运行的结果为true. 当我们在字符串中使用replace时, 我们可以使用$1, $2这样的方式获取第n个匹配项,并用来替换字符串. 如(2)中的运行结果.
非捕获括号的模式匹配(?:x)
主要用来匹配某一类字符串但不记住匹配项.
案例:
let str = 'xuxixuxi'
let reg = /(?:xu