正则详解表达式详解

#Specify RegularExprssion(正则详解-萧淳元)


###step1 两种创建形式

  • 字面量

    let pattern = /模板字符串/igm; (字符串模板是写死的)
  • 构造函数

    let pattern = new RegExp(‘模板字符串’,igm); (字符串模板可以使用参数方式传入)
    [igm是匹配模式]

###step2 让正则去匹配字符串

######匹配的执行有两种方式

  • pattern.test(“模板字符串”)
  • pattern.exec(“模板字符串”)

    区别

    test()方法返回的ture或false

    exec()返回的是匹配到的字符串数组

###step3 转义字符

如果需要匹配具有特殊意义的字符需要使用\符号来转译

###step4 字符类
顾名思义就是一类字符,和一类字符进行匹配如果匹配上一个即为匹配成功.

let pattern = /[jsabcd]/

let orgain = ‘bcd’

字符类使用中括号表现,如使用pattern去匹配orgain,匹配到b即为成功,如果没有b匹配到c即为成功如果没有c匹配到d即为成功。总之只要orgain字符串中含有[]中的字母都可以匹配成功。

取反

let pattern = [^jsp]

匹配字符串中除了jsp之外的所有字符。

如果需要匹配26个英文字母 let pattern =/[a-zA-Z]/ 前面字母的一定要比后面的小

匹配所有的数字 let pattern = /[0-9]/

**.**可以匹配到处理\n之外所有的字符。

#####一些简写

正则简写
/[a-zA-Z0-9_]// \w /
/1// \W /
/[0-9]// \d /
/[^0-9]// \D /
匹配空白字符/ \s /
除了空白字符外的所有字符/ \S /

###step5 重复

比如需要匹配9527这个数字,我们没有必要按照常规的/[\d\d\d\d]/这样写四次,
可以使用量词**/[\d{3}]/

如果需要匹配一位或者两位的话
/[\d{1,2}]/

匹配至少一个 /[\d{1,}]/或者/\d+/

匹配零个或者一个
/\d?/

匹配零次或者更多
/[\d{0,}]/或者/\d*/**

###step6 非贪婪重复
正则在默认情况下都是贪婪的,就是在使用量词是候会尽可能多的匹配。

ex. 用/\a+/ 去匹配 ‘aaabb’ 默认情况下会匹配出aaa,尽可能多的匹配。

转换成非贪婪匹配

在量词后面加上**?**即可将其转换为非贪婪匹配。

###step7 选择
相当于或运算

ex. let pattern = /js|css|python|java/;

let origin = ‘css’ 结果为css

pattern的意思是待匹配的字符串中只要有js,css,python,java中任意一个即算是匹配成功。

###step8 分组
分组是将字符作为一组来进行匹配

ex. let origin = ‘ababab’

let pattern = /(ab)+/ 结果:[ababab,ab]

结果中的第一个元素时分组匹配的结果,之后的元素是有几个分组就会对应几个匹配。

let origin = ‘abbbbba’

let pattern = /(a)(.*)\1/

["annnnna", "a", "nnnnn"]
元素0:整个正则匹配到的元素

元素1:第一个分组匹配到的元素

元素2:第二个分组匹配到的元

’\1’为引用第一个分组的模式

###step9 位置匹配

  • 首匹配

ex. let pattern = /^js/表示待匹配字符串的首位字符必须是j且j后面的一个字符必须是s,否则匹配不成功。

  • 尾匹配

ex. let pattern = /jsKaTeX parse error: Undefined control sequence: \d at position 82: …et pattern = /^\̲d̲+/ 表示待匹配的字符串必须从头到尾都是数字。

  • 单词之间的匹配

ex. let str = ‘js html’

let pattern = /js\b/ 说明:这里的\b是\w和\W之外的字符比如空字符或@%#这些

  • 前瞻性匹配

ex. let origin = ‘typescript’

let pattern = /type(?**=**script)/

只有当origin中type后跟着是script才匹配origin中的type。

  • 负向前瞻性

ex. let origin = ‘typescript’

let pattern = /type(?**!**script)/
说明:当origin字符串中type后如果跟着script则匹配不到origin中的type。和前瞻性匹配逻辑相反。

###step10 再次了解RegExp对象

  • 使用new RegExp创建匹配模板是,如果涉及到特殊字符需要双重转译

    比如需要匹配\则需要new RegExp(’\\’)来创建匹配\的模板。

  1. a-zA-Z0-9_ ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值