「正则规范整理」

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

正则的语法有哪些:

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,由于从左向右最先开始的匹配有最高优先级

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 正则表达式 由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字...
    yshenhn阅读 1,028评论 0 0
  • Python中的正则表达式(re) import rere.match #从开始位置开始匹配,如果开头没有则无re...
    BigJeffWang阅读 7,050评论 0 99
  • 只能输入数字:"^[0-9]*$"。 只能输入n位的数字:"^\d{n}$"。 只能输入至少n位的数字:"^\d{...
    johney_zhou阅读 409评论 0 1
  • 以前参加过很多婚礼,渐渐对于婚礼的一贯习俗已经见惯不怪了,甚至感觉有点走过场了。不过今天的这场婚礼,让我又有不一样...
    易经起名杨浚菖阅读 403评论 0 5
  • 我很害怕高温的,但是在空调房里憋得太久,肺又不舒服,该去有氧呼吸了。身体稍微好点,选择终南行。这种状况下,大坝沟是...
    fe4e49a813e1阅读 212评论 0 0