正则表达式

字符

| 示意在两个或多个项之间举行挑选,相似或
/ 最先和末端
\ 转义

- 连字符,当且仅当在字符组 [] 的内部示意一个局限,比方[A-Z]示意局限从AZ;假如需要在字符组内里示意一般字符 - ,放在字符组的开首或末端即可
. 婚配出换行符 \n 以外的任何单个字符
\d 等价[0-9],婚配09数字
\D 等价[^0-9],与 \d 相反
\w 婚配以下字符:A-Z、a-z、0-9个下划线,等价于 [A-Za-Z0-9]
\W [^A-Za-z0-9]

限定符(量词字符)

显现限定符位于大括号{}中,并包含指导涌现次数上下限的数值; *+? 这三个字符属于单字符限定符:

{n} 恰好婚配 n 请输入代码次
{n,} 起码婚配 n
{n,m} 婚配起码 n 次,最多 m 次,即婚配 nm
* 等价 {0,}
+ 等价 {1,}
? 等价 {0,1}

注重

  • 显现限定符中,逗号和数字之间不能有空格,不然返回null

  • 贪欲量词 *+JavaScript默许是贪欲婚配,即婚配反复字符是尽量多的婚配

  • 惰性(起码反复婚配)量词 :当举行贪欲婚配,只需要在要婚配的字符背面加上一个 ? 即可

var reg = /a+/;
var reg2 = /a+?/;
var str = 'aaab';
str.match(reg); // ["aaa"]
str.match(reg2); // ["a"]

定位点(锚字符、边境)

^ 婚配最先的位置。将 ^ 用作括号 [] 表达式中的第一个字符,则会对字符集求反
$ 婚配末端的位置
\b 与一个字边境婚配,比方 er\b 与 “never” 中的 “er” 婚配,但与 “verb” 中的 “er” 不婚配
\B 非边境字婚配

标记

[] 字符组,标记括号表达式的最先和末端。[...] 婚配括号内恣意字符。许多字符在 [] 都邑落空本来的意义:[^...] 婚配不在括号内的恣意字符;[?.]婚配一般的问号和点号

注重:

\[] 中仍为转义字符。假如要婚配反斜杠字符,运用两个反斜杠 \\
{} 标记限定符表达式的最先和末端
{} 标记子表达式的最先和末端,重要作用是分组,对内容举行辨别
(形式) 记着和这个形式婚配的婚配项(捕捉分组),不要滥用括号,假如不需要保留子表达式,可运用非捕捉型括号 (?:) 来举行机能优化
(?:形式) 与形式婚配,但不保留婚配项(非捕捉分组)
(?=形式) 零宽正向先行断言,请求婚配与形式婚配的搜刮字符串。找到一个婚配项后,将在婚配文本之前最先搜刮下一个婚配项;但不会保留婚配项
(?!形式) 零宽负向先行断言,请求婚配与形式不婚配的搜刮字符串。找到一个婚配项后,将在婚配文本之前最先搜刮下一个婚配项;但不会保留婚配项
先行断言 ?= 形式:x 只要在 y 前面才婚配,必需写成 /x(?=y)/。诠释:找一个 x,谁人 x 的背面要有 y
先行否认断言 ?! 形式:x 只要不在 y 前面才婚配,必需写成 /x(?!y)/。诠释:找一个 x,谁人 x 的背面没有 y

ES7提案

后行断言( ?<= 形式):与”先行断言”相反, x 只要在y背面才婚配,必需写成 /(?<=y)x/。诠释:找一个 x,谁人 x 的前面要有 y
后行否认断言 ( ?<! 形式): 与”先行否认断言“相反,x 只要不在y背面才婚配,必需写成 /(?<!y)x/。 诠释:找一个x ,谁人 x 的前面没有 y
反向援用:重要作用是给分组加上标识符 ln n 示意援用字符,与第 ln 个子表达式第一次婚配的字符相婚配

var str = '<div class="o2">' +
    '<div class="o2_team">' +
    '<img src="">' +
    '</div>' +
    '</div> ';
// <(?!img) 示意找一个左尖括号<,而且左尖括号 < 的背面没有img字符;
// (?:.|\r|\n)*? 示意婚配摆布尖括号<>内里的.或\r或\n,而且婚配次数为*?;(?:)不保留婚配项,进步机能;
// *背面加个? 示意非贪欲婚配。
var reg = /<(?!img)(?:.|\r|\n)*?>/gi;
str.match(reg);

反向援用的例子,给 MikeMike 字符后加个单引号:

var reg = /(Mike)(\1)(s)/;
var str = "MikeMikes";
console.log(str.replace(reg, "$1$2'$3"));
// 返回效果 MikeMike's

非打印字符

\s 任何空缺字符。即 [\f\n\r\t\v]
\S 任何非空缺字符
\t Tab 字符 (\u0009)
\n 换行符 (\u000A)
\v 垂直制表符 (\u000B)
\f 换页符 (\u000C)
\r 回车符 (\u000D)

注重

\n\r 一同运用,即 /[\r\n]/g 来婚配换行,由于 Unix 扩大的体系以 \n 标志末端,Windows\r\n 标志末端

其他

\cx 婚配 x 指导的控制字符,请求 x 的值必需在 A-Za-z 局限内
\xn 婚配 n n 是一个十六进制转义码,两位数长
\un 婚配 n 个中 n 是以四位十六进制数示意的 Unicode 字符
\nm\n 先尝试反向援用,不可则再尝试标识为一个八进制转义码
\nmln 是八进制数字 (0-3)ml 是八进制数字 (0-7) 时,婚配八进制转义码 nml

修饰符

i 实行不辨别大小写的婚配
g 实行一个全局婚配,即找到一切的婚配,而不是在找到第一个今后就住手
m 多行婚配形式,^ 婚配一行的开首和字符串的开首,$ 婚配行的完毕和字符串的完毕
ES6新增 uy 修饰符

u 修饰符 Unicode 形式,用来正确处理大于 \uFFFFUnicode 字符。正确处理四个字节的 UTF-16 编码

// 加u修饰符今后,ES6就会辨认\uD83D\uDC2A为一个字符,返回false。
/^\uD83D/u.test('\uD83D\uDC2A');  // false
/^\uD83D/.test('\uD83D\uDC2A'); // true

y 修饰符 与g 修饰符都是全局婚配,不同之处在于:lastIndex 属性指定每次搜刮的最先位置,g 修饰符从这个位置最先向后搜刮,直到发明婚配为止;然则 y 修饰符请求必需在 lastIndex 指定的位置发明婚配,即 y 修饰符确保婚配必需从盈余的第一个位置最先

/b/y.exec('aba')  // null
/b/.exec('aba')  // ["b"]

优先级递次

\ 转义符
(),(?:),(?=),[] 括号和中括号
*、+、?、{n}、{n,}、{n,m} 限定符
任何元字符 ^、$、\ 定位点和序列
| 替代

    原文作者:whjin
    原文地址: https://segmentfault.com/a/1190000008949695
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞