不得不知的正则( 一 )

作者: 会会会会 | 来源:发表于2018-12-17 10:48 被阅读9次

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

一些基本常识

  • 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"]

相关文章

  • 不得不知的正则( 一 )

    前言对一个程序员来说,正则是不得不了解的东西,日常开发中,用处很多;作为一个前端开发人员,也是常常用到。可以匹配出...

  • 不得不知的正则( 二 )

    总结了那么多,正式进入激动的操练吧 练习一 场景是,比如写一个后端接受到前端返回的错误上报数据,可以拿到当前的re...

  • python练习之查找一个文件中的字符串是否在另一个文件中存在

    不得不说正则是个好东西。 没错这次又用到正则表达式。直接上代码: hello.txt里面内容: world.txt...

  • 深入正则表达式(3):正则表达式工作引擎流程分析与原理释义

    作为正则的使用者也一样,不懂正则引擎原理的情况下,同样可以写出满足需求的正则,但是不知道原理,却很难写出高效且没有...

  • 前端充值数目正则表示

    不得不说 正则表达式可视化 是真的不错, 研究正则的时候, 这个网站是很好的帮手。 现在前端页面有一个金额输入框,...

  • JS有关正则的常用方法归纳

    一、正则的方法 正则在项目中是经常用到的,但是有时候方法内的参数容易搞混淆,不知道是放正则还是字符串,特地归类一下...

  • L0、L1、L2范数在机器学习中的应用

      正则化在机器学习中经常出现,但是我们常常知其然不知其所以然,今天Cathy将从正则化对模型的限制、正则化与贝叶...

  • regexp 正则包

    正则对象 正则使用都是通过创建对应的正则对象,调用对象方法所实现。 新建正则对象 正则对象属性方法 正则方法 一般...

  • 正则

    一、正则 1、什么是正则? 正则是用来规范表单数据。 2、正则的定义: (1)字面量方式 ...

  • JavaScript中的RegExp

    一、 认识正则 1、 什么是正则正则就是一个事物的规则。什么是正则表达式,就是描述事物规则的式子。2、 正则能帮我...

网友评论

    本文标题:不得不知的正则( 一 )

    本文链接:https://www.haomeiwen.com/subject/mrkqkqtx.html