不得不知的正则( 一 )

作者 : 开心源码 本文共1362个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共189人阅读

前言
对一个程序员来说,正则是不得不理解的东西,日常开发中,用处很多;作为一个前台开发人员,也是常常用到。可以匹配出你自己想要的字段,文件,反正就是很爽。与其四处百度,不如自己掌握;
平常自己练习正则的时候,可以找个在线正则进行练习,就比较方便;
随意推荐一个 在线正则工具
这里主要总结少量正则的实例用法。

少量基本常识

  • 1、特殊字符

特殊字符,需要用反斜杠 \ 进行转译

[ ] \ ^ $ . | ? * + ( )

注意: 字符集中只有4个 字符 (字符集后面会说),也就是只有这4个需要转译;

  ] \ ^ -

“]”代表字符集定义的结束;
“\”代表转义;
“^”代表取反;
“-”代表范围定义

  • 2、js正则引擎工作机制—正则向导

即惰性,猴急的;

regex|regex not (这里 | 符合是或者者的意思)
匹配 “regex not”
返回 regex

  • 3、字符集

正则表达式引擎仅仅匹配多个字符中的一个
<<q[^u]>>:匹配一个q,后面跟着一个不是u的字符
比方匹配 “hellow quite qi”
返回qi,而不是q,或者者qu;

  • 4、使用?*或者+ 进行重复

?:告诉引擎匹配前导字符0次或者一次。
+:告诉引擎匹配前导字符1次或者屡次 {1,}
*:告诉引擎匹配前导字符0次或者屡次 {0,}

“+”是贪婪的
“?*”的重复也是贪婪的

举个例子

'This is a <EM>first</EM> test'.match(/<.+>/)

返回'<EM>first</EM>’,而不是<EM>,
. 理论上匹配任何字符
由于贪婪的意思就是尽可能多的返回的意思,所以第一个”>”也是.的范围,直到匹配到最后一个“>”。

处理办法一:

“+”的惰性代替贪婪性
“+”后面紧跟一个问号“?”,问号的意思就是0次或者者1次

'This is a <EM>first</EM> test'.match(/<.+?>/)

就返回的<EM>

'This is a <EM>first</EM> test'.match(/<.+?>/g)

就返回的<EM>和</EM>,g的意思就是全局的意思,加个m就是匹配多行的意思,加个i就是不区分大小写;
就这样用,意思是全局匹配,不区分大小写

'This is a <EM>first</Em> test'.match(/<.+?>/ig)

最后返回<EM>,和</Em>;

处理办法二:
'This is a <EM>first</EM> test'.match(/<[^>]+>/)

^ 是非的意思
[^>] 不是>的一个字符
解释是,匹配一个< 及不是>的所有字符1到屡次(最好屡次,贪婪),再加一个>,

更好,由于,使用取反字符集则不需要进行回溯。

  • 5、位置锚定

^ 匹配一行字符串第一个字符前的位置
$ 匹配字符串中最后一个字符的后面的位置

(?<!a)b 匹配一个b前面,没有a的b,向后查看

q(?!u) 匹配一个q,后面没有u的q,向前查看

q(?=?) 匹配一个q,后面等于?

这里的前后很好了解

比方 ‘hello quite qq’, 字符串,从左到右是匹配的顺序,比方匹配到p的时候,要看后面有没有u,那么对引擎来说,就是向前查看,
判断q前面有没有u的话,引擎就要回溯上个匹配字符,所以就是向后的看了,

注意:js目前不支持向前查看,有些浏览器有,兼容不好,慎用。

  • 6、多行匹配

‘first line\n\r first line’.match(/line$/mg)
返回[“line”, “line”]

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 不得不知的正则( 一 )

发表回复