文章目录
- 一、前言
- 二、高级`API`
- 2.1、模式匹配的用法`(x)`
- 2.2、非捕获括号的模式匹配`(?:x)`
- 2.3、先行断言`x(?=y)`
- 2.4、后行断言`(?<=y)x`
- 2.5、正向否定查找`x(?!y)`
- 2.6、反向否定查找`(?<!y)x`
- 2.7、字符集合和反向字符集合的用法 `[xyz] / [^xyz]`
- 2.8、词边界和非单词边界匹配`\b\B`
- 2.9、空白字符和非空白字符匹配`\s\S`
- 2.10、单字字符和非单字字符匹配`\w\W`
- 三、使用案例
- 3.1、去除字符串内指定元素的标签
- 3.2. 短横线命名转驼峰命名
- 3.3. 去除字符串中的空格符
- 3.4. 判断指定格式的数据输入合法性
- 3.5. 去除`url`参数字符串中值为空的字段
- 3.6. 将浏览器参数字符串转化为参数对象
- 3.7. 计算字符串字节数
- 3.8. 匹配是否包含中文字符
- 3.9. 实现搜索联想功能
- 四、最后
一、前言
正则表达式也许是javascript
语言中最晦涩难懂的,但是也往往是最简洁的。工作中遇到的很多问题,诸如搜索,查找,高亮关键字等都可以使用正则轻松解决。
如果大家觉得正则表达式理解起来很麻烦,也可以使用如下在线网站【前往】, 只需要输入你的正则表达式, 它就能以图形的方式将你的正则展示出来:
二、高级API
2.1、模式匹配的用法(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)
中的运行结果.
2.2、非捕获括号的模式匹配(?:x)
主要用来匹配某一类字符串但不记住匹配项.
案例:
let str = 'xuxixuxi'
let reg = /(?:xuxi){1,2}/g
reg.test(str) // true (1)
解释: 其中(?:)
被称为非捕获括号, 我们可以使用它匹配一组字符但是并不记住该字符,一般用来判断某类字符是否存在于某字符串中.
2.3、先行断言x(?=y)
先行断言: 匹配
x
仅仅当x
后面跟着y
.
案例:
let str = '王者融化'
let reg = /王(?=者)/
reg.test(str) // true (1)
解释: /王(?=者)/
会匹配到王
仅当它后面跟着者
.但是者
不属于匹配结果的一部分.
2.4、后行断言(?<=y)x
后行断言: 匹配
x
仅当x
前面是y
.
案例:
let str = 'xuxiA'
let reg =