美文网首页
「正则规范整理」

「正则规范整理」

作者: LYF闲闲闲闲 | 来源:发表于2019-04-16 14:24 被阅读0次

正则表达式的定义:用来描述或匹配一系列匹配某个句法规则的字符串。

正则的语法有哪些:

1. 选择

竖线 | ,最低优先级

2. 数量限定

+ 代表符号前面的字符至少出现一次 (一次 ~ 多次)
?代表符号前面的字符最多可以出现一次 (0次、1次)
* 代表符号前面的字符可以出现 (0次 ~ 多次)
{n} 出现n次
{n,} 最少出现n次,范围在n~∞
{n,m} 出现次数n~m之间

3. 匹配

() 定义操作符的范围和优先级

4. 正则表达式

字符 描述 示例
^ 匹配开始位置 c
$ 匹配结束位置 c
. 匹配除\r \n 之外的单个字符 c
\ 标记特殊字符 n、\n
x|y 匹配x或者y c
[xyz] 匹配x或y或z任意一个 c
[^xyz] 匹配未列出的任意字符 c
[a-z] 匹配a-z范围内的小写字母 c
[^a-z] 匹配不在a-z范围内的字符 c
\b 匹配一个单词边界 er\b : 匹配 never 中的 er ,不匹配 verb 中的 er
\B 匹配非单词边界 er\B : 不匹配 never 中的 er ,匹配 verb 中的 er
\d 匹配一个数字 等价于[0-9]
\D 匹配一个非数字 等价于[^0-9]
\f 匹配一个换页符 等价于\x0c和\cL
\n 匹配一个换行符 等价于\x0a和\cJ
\r 匹配一个回车符 等价于\x0d和\cM
\s 匹配任何空白字符 等价于[ \f\n\r\t\v]
\S 匹配任何非空白字符 等价于 [^ \f\n\r\t\v]
\t 匹配一个制表符 等价于\x09和\cI
\v 匹配一个垂直制表符 等价于\x0b和\cK
\w 匹配包括下划线的任何单词字符 等价于[A-Za-z0-9_]
\W 匹配任何非单词字符 等价于[^A-Za-z0-9_]
\cx 匹配由x指明的控制字符,x的值必须为A-Z或a-z \cM匹配一个Control-M或回车符。\ca等效于\u0001, \cb等效于\u0002
(pattern) 用括号括起来表示一个子模式,匹配pattern并获取这一匹配的子字符串。该子字符串用于向后引用
(?:pattern) 匹配pattern但不获取匹配的子字符串 industr(?:y | ies), industry | industries
(?=pattern) 正向肯定预查,非获取匹配
(?!pattern) 正向否定预查,非获取匹配
(?<=pattern) 反向肯定预查,非获取匹配
(?<!pattern) 反向否定预查,非获取匹配
正则表达式的获取匹配和非获取匹配

用括号括起来表示一个子模式,这个子模式就是一个获取匹配,如果在子模式的前面加上 ?:、 ?! 、?<=、 ?<!,就成为非获取匹配

<div id="test">
Windows 103
Windows 95 and Windows 98 are the successor.
Then Windows 2000 and Windows Xp appeared.
Windows Vista is the Latest version of the family. 
</div>
<button onclick='reg_replace()'>替换</button>

function reg_replace()
{
  var test = document.getElementById("test");
  var regex = /(Windows [\w]+\b)/g; // 加上括号获取匹配
  var regex2 = /Windows [\w]+\b/g; // 去掉括号 非获取匹配
  var regex3 = /(?:Windows [\w]+\b)/g; //加上?: 非获取匹配
  test.innerHTML = test.innerHTML.replace(regex,"<span style='background-color:orange'>$1</span>");
}
获取匹配 非获取匹配

获取匹配会把子模式中保存起来,用于向后引用,同时可以使用$1引用,一个括号代表一个子模式,$1 表示匹配第一个括号里的字符串,如果有多个()包含,顺序依次向后加 $1 $2 $3 ……$n

非获取匹配

(?:pattern) 匹配结果。Java(?:6|7)等效于Java6|Java7,在需要使用()的情况下,同时不需要把匹配的内容进行保存,后面也不需要引用,可以用这种方式,同时也是对资源的节约
在非获取匹配下,也不会拥有分组的组号

零宽断言

零宽度的匹配,查找某个内容之前或者之后的内容,匹配的内容不会保存到对应的匹配结果中,仅仅匹配了一个位置。

1. 正向预查

(?=pattern) 正向匹配。Java(?=6),匹配后面跟着6的Java

(?!pattern) 正向不匹配。Java(?!6),匹配后面不跟着6的Java

2. 反向预查

(?<=pattern) 反向匹配。(?<=J)a,匹配紧跟字母J后面的a

(?<!pattern) 反向不匹配。(?<!J)a,不匹配紧跟字母J后面的a

正则replace特殊标记符$
字符 替换文本
$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串。
$` 位于匹配子串左侧的文本。
$' 位于匹配子串右侧的文本。
$$ 直接量符号。
正则replace应用—千分制
// 整数千分制
let a = '99999999999'.replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,');
// 可以包含小数点后两位的千分制
var b = '99999999999.02'.replace(/\d{1,3}(?=(\d{3})+(?:\.\d{1,2})?$)/g, '$&,');
正则符号的优先级
优先权 符号
最高 \
()、(?:)、(?=)、[]
*、+、?、{n}、{n,}、{n,m}
^、$、中介字符
次最低 串接,即相邻字符连接在一起
最低 |
正则的贪婪&非贪婪

贪婪模式,匹配尽可能多的,属于贪婪模式的量词包括 {n,m} {m,} ? * +
非贪婪模式,匹配尽可能少的,在贪婪模式基础上再加上?即为非贪婪模式。

var str='aabab';
var reg=/a.*?b/g;
var res=str.match(reg);
console.log(res); 

结果:

["aab", "ab"]

先匹配aab,再匹配ab,由于从左向右最先开始的匹配有最高优先级

相关文章

  • 「正则规范整理」

    正则表达式的定义:用来描述或匹配一系列匹配某个句法规则的字符串。 正则的语法有哪些: 1. 选择 竖线 | ,最低...

  • hive 实用技能

    1. 注意点 1.正则转义,反向引用 hive自己本身的正则规范 shell脚本中,hive正则的规范 2. ca...

  • 正则

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

  • 正则整理

  • 正则整理

    在element-ui里判断正则 0-100的整数 校验中文 只能输入数字

  • 整理规范

    一、注明所引用的网址1、在Markdown语法下使用格式参考网址2、不使用Markdown语法直接网址前摘自:.....

  • UI设计规范整理一iOS字体和切图及规范

    UI设计规范整理一iOS字体和切图及规范 UI设计规范整理一iOS字体和切图及规范

  • css命名整理

    文章整理了Web前端开发中的各种CSS规范,包括文件规范、注释规范、命名规范、书写规范、测试规范等。 一、文件规范...

  • css命名规范整理

    文章整理了Web前端开发中的各种CSS规范,包括文件规范、注释规范、命名规范、书写规范、测试规范等。 一、文件规范...

  • 预处理模块

    规范化、标准化、归一化、正则化,网上搜了一下,这几种概念在不同的地方叫法各有不同。因此,现做一个初步整理,便于后期...

网友评论

      本文标题:「正则规范整理」

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