资讯专栏INFORMATION COLUMN

正则表达式

Yangyang / 1309人阅读

摘要:将用作括号表达式中的第一个字符,则会对字符集求反匹配结尾的位置与一个字边界匹配,比如与中的匹配,但与中的不匹配非边界字匹配标记字符组,标记括号表达式的开始和结尾。

字符

| 表示在两个或多个项之间进行选择,类似或
/ 开始和结尾
转义

- 连字符,当且仅当在字符组 [] 的内部表示一个范围,比如[A-Z]表示范围从AZ;如果需要在字符组里面表示普通字符 - ,放在字符组的开头或结尾即可
. 匹配出换行符 之外的任何单个字符
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"]

定位点(锚字符、边界)

^ 匹配开始的位置。将 ^ 用作括号 [] 表达式中的第一个字符,则会对字符集求反
$ 匹配结尾的位置
 与一个字边界匹配,比如 er 与 "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 = "
" + "
" + "" + "
" + "
"; // <(?!img) 表示找一个左尖括号<,而且左尖括号 < 的后面没有img字符; // (?:.| | )*? 表示匹配左右尖括号<>里面的.或 或 ,而且匹配次数为*?;(?:)不保存匹配项,提高性能; // *后面加个? 表示非贪婪匹配。 var reg = /<(?!img)(?:.| | )*?>/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 v]
S 任何非空白字符
Tab 字符 (u0009)
换行符 (u000A)
v 垂直制表符 (u000B)
f 换页符 (u000C)
回车符 (u000D)

注意

一起使用,即 /[ ]/g 来匹配换行,因为 Unix 扩展的系统以 标志结尾,Windows 标志结尾

其他

cx 匹配 x 指示的控制字符,要求 x 的值必须在 A-Za-z 范围内
xn 匹配 n n 是一个十六进制转义码,两位数长
un 匹配 n 其中 n 是以四位十六进制数表示的 Unicode 字符
m 先尝试反向引用,不可则再尝试标识为一个八进制转义码
mln 是八进制数字 (0-3)ml 是八进制数字 (0-7) 时,匹配八进制转义码 nml

修饰符

i 执行不区分大小写的匹配
g 执行一个全局匹配,即找到所有的匹配,而不是在找到第一个之后就停止
m 多行匹配模式,^ 匹配一行的开头和字符串的开头,$ 匹配行的结束和字符串的结束
ES6新增 uy 修饰符

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

// 加u修饰符以后,ES6就会识别uD83DuDC2A为一个字符,返回false。
/^uD83D/u.test("uD83DuDC2A");  // false
/^uD83D/.test("uD83DuDC2A"); // true

y 修饰符 与g 修饰符都是全局匹配,不同之处在于:lastIndex 属性指定每次搜索的开始位置,g 修饰符从这个位置开始向后搜索,直到发现匹配为止;但是 y 修饰符要求必须在 lastIndex 指定的位置发现匹配,即 y 修饰符确保匹配必须从剩余的第一个位置开始

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

优先级顺序

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82367.html

相关文章

  • 正则达式

    摘要:本文内容共正则表达式火拼系列正则表达式回溯法原理学习正则表达式,是需要懂点儿匹配原理的。正则表达式迷你书问世了让帮你生成和解析参数字符串最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。 JS 的正则表达式 正则表达式 一种几乎可以在所有的程序设计语言里和所有的计算机平台上使用的文字处理工具。它可以用来查找特定的信息(搜索),也可以用来查...

    bang590 评论0 收藏0
  • JS中的正则达式

    摘要:构造函数可以有两个字符串参数,第一个参数包含正则表达式的主体部分。只读的布尔值,说明这个正则表达式是否带有修饰符。中正则的扩展构造函数在中,只能接受字符串作为参数,允许其直接接受正则表达式作为参数。 上文传送门:初探正则表达式 正则表达式是一个描述字符模式的对象,JavaScript 的 RegExp 类表示正则表达式,String 和 RegExp 都定义了方法,后者使用正则表达式进...

    Soarkey 评论0 收藏0
  • JavaScript正则达式总结

    摘要:正则表达式一直是里比较难以掌握的点。在中创建正则的两种方式使用字面量这就是正则表达式的字面量语法,表示正则表达式的模式,为正则表达式的标志。字面量形式的正则表达式一般使用较多,也推荐大家尽可能使用这种形式,简洁易读,符合正常的使用习惯。 正则表达式一直是js里比较难以掌握的点。 看不懂,学不会,记不住。 每次需要用到正则的时候,都需要再去查找资料。 今天花时间把正则的知识点总结下,希望...

    big_cat 评论0 收藏0
  • 正则与JS中的正则

    摘要:注意本文将正则与中的正则分开讨论。正则零宽断言更多参考各种语言对于正则不同支持参考单行模式与多行模式通过设置正则表达式后的修饰符可开启对应的匹配模式单行模式和多行模式。 最近这段时间帮同学处理一些文档, 涉及到一些结构化文档的工作大部分都得使用正则表达式, 之前对于正则的认识大多来源于语言书上那几页的介绍, 自己也没有用过几次。这里将我之前感到模糊的概念作个整理。因为对JS了解多点,所...

    firim 评论0 收藏0
  • JavaScript正则达式的匹配模式

    摘要:选择分组和引用正则表达式的语法还包括指定选择项子表达式分组和引用前一子表达式的特殊字符。带圆括号的表达式的另一个用途是允许在同一正则表达式的后部引用前面的子表达式。 正则表达式(regular expression)是一个描述字符模式的对象。JavaScript的 RegExp类 表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进 行强大的模式匹配和文本检索与...

    wqj97 评论0 收藏0
  • 正则达式

    摘要:最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。学习目标了解正则表达式语法在中使用正则表达式在中使 JS高级技巧 本篇是看的《JS高级程序设计》第23章《高级技巧》做的读书分享。本篇按照书里的思路根据自己的理解和经验,进行扩展延伸,同时指出书里的一些问题。将会讨论安全的类型检测、惰性载入函数、冻结对象、定时器等话题。1. 安全的类型检测...

    yibinnn 评论0 收藏0

发表评论

0条评论

Yangyang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<