资讯专栏INFORMATION COLUMN

正则表达式(笔记)

yankeys / 1609人阅读

摘要:正则表达式的限定符有字符描述匹配前面的子表达式零次或多次。注意限定符出现在范围表达式之后。定位符定位符使您能够将正则表达式固定到行首或行尾。

在线正则测试工具: http://www.regexpal.com/

语法

正则表达式(RegExp: regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

普通字符

普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写小写字母所有数字所有标点符号和一些其他符号。

非打印字符

非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列:

字符 描述
cx 匹配由x指明的控制字符.
f 匹配一个换页符. 等价于x0c和cL.
匹配一个换行符. 等价于x0a和cJ.
匹配一个回车符. 等价于x0d和cM.
匹配一个制表符. 等价于x09和cI.
v 匹配一个垂直制表符.等价于x0b和cK.
s 匹配任何空白字符, 包含换页符、换行符、回车符、空格、制表符等等. 等价于[f v].
S 匹配任何非空白字符. 等价于[^f v]
特殊字符

所谓特殊字符,就是一些有特殊含义的字符,如上面说的*.txt中的*,简单的说就是表示任何字符串的意思。如果要查找文件名中有 * 的文件,则需要对 * 进行转义,即在其前加一个。ls *.txt。

许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符转义,即,将反斜杠字符 ( ) 放在它们前面。下表列出了正则表达式中的特殊字符:

特殊字符 描述
$ 匹配输入字符串的结尾位置.
( ) 标记一个子表达式的开始结束位置.
* 匹配前面的子表达式零次或者多次.
+ 匹配前面的子表达式一次或者多次.
. 匹配出换行符 之外的任何单字符.
[ 标记一个中括号表达式的开始.
? 匹配前面的子表达式零次一次, 或指一个非贪婪限定符
将下一个字符标记为或特殊字符, 或原义字符, 或向后引用, 或八进制转移符.例如: n匹配字符n. 匹配换行符. 序列 匹配 , 而 ( 则匹配 (.
^ 匹配输入字符串的开始位置, 除非在方括号表达式中使用, 此时它表示不接受该字符集.
{ 标记限定字符表达式的开始
| 指明两项之间的一个选择
限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{n,m}共6种。
正则表达式的限定符有:

字符 描述
* 匹配前面的子表达式零次或多次。例如,zo 能匹配 "z" 以及 "zoo"。 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,"zo+" 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,"o{2}" 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,"o{2,}" 不能匹配 "Bob" 中的 "o",但能匹配 "foooood" 中的所有 o。"o{1,}" 等价于 "o+"。"o{0,}" 则等价于 "o*"。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。"o{0,1}" 等价于 "o?"。请注意在逗号和两个数之间不能有空格

注意: 限定符出现在范围表达式之后。因此,它应用于整个范围表达式

*、+、?、和 {} 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪最小匹配

定位符

定位符使您能够将正则表达式固定到行首行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。
定位符用来描述字符串或单词的边界^$分别指字符串的开始结束, 描述单词的前或后边界,B 表示非单词边界。
正则表达式的限定符有:

字符 描述
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 或 之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 或 之前的位置匹配。
 匹配一个字的边界,即字与空格间的位置。
B 非字边界匹配。

注意: 不能将限定符与定位点一起使用。由于在紧靠换行或者字边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。

未完

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

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

相关文章

  • js正则达式学习笔记

    摘要:分组小括号功能较多有三种功能,作用一,把单独的项组合成子表达式。作用三,允许后面引用前面的表达式。如果这时的正则表达式是一个非全局的,那么和正则表达式方法拿到的结果相同。,也可以接受一个正则表达式作为参数。 正则表达式创建字面量创建,a = /abc/gim;构造函数创建,a = new RegExp(abc,gim)正则表达式中的特殊字符,[...] 方括号中的任意字符[^...] ...

    superPershing 评论0 收藏0
  • 《javascript高级程序设计》笔记正则达式

    摘要:布尔值,表示是否设置了标志。正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回正则表达式的实例方法方法是否匹配基本语法参数为正则表达式为所要匹配的字符串返回值布尔值在模式与该参数匹配的情况下返回否则,返回。 高程书中对正则部分介绍的偏少,特别是元字符部分几乎没有介绍;我找了几篇不错的博客作为收录:正则表达式30分钟入门教程正则表达式-理论基础篇正则表达式-基础实战...

    ingood 评论0 收藏0
  • js正则达式学习笔记

    摘要:说来惭愧,做前端快三年对于正则表达式的应用还是很浅薄,大家都知道正则的速度基本上是最快的,但就是懒得去记那些语法和规则,这次项目中多次用到了需要匹配替换的动作,终于下定决心去研究一下了。 说来惭愧,做前端快三年对于正则表达式的应用还是很浅薄,大家都知道正则的速度基本上是最快的,但就是懒得去记那些语法和规则,这次项目中多次用到了需要匹配替换的动作,终于下定决心去研究一下了。 实例化正则对...

    Towers 评论0 收藏0
  • 深入理解ES6笔记(二)字符串和正则表达

    摘要:主要知识点新增的字符串处理方法模板字面量以及正则表达式上的改动深入理解笔记目录字符串字符串是大原始数据类型。如果在字符串的结束部分检测到指定文本,返回,否则返回。字符串内插入反撇号的方式。 主要知识点:新增的字符串处理方法、模板字面量以及正则表达式上的改动showImg(https://segmentfault.com/img/bVbfWak?w=861&h=622); 《深入理解E...

    TANKING 评论0 收藏0
  • 随手查阅的正则匹配笔记

    摘要:可视化查看正则表达式复杂版,很直观,神器一枚可视化查看正则表达式简化版 常见需求如下: 如果你只需要获取字符串中的首个匹配项 var re = /quicks(brown).+?(jumps)/ig; var result = re.exec(The Quick Brown Fox Jumps Over The Lazy Dog); // 就算有 g 标识,通过 exec 也只能获取到...

    Riddler 评论0 收藏0

发表评论

0条评论

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