正则表达式笔记

目标

来源

  • 了解正则表达式语法
  • 在 IDE 中使用正则表达式处理复杂的字符串查找、替换需求
  • 在 JavaScript 程序设计中使用正则表达式处理字符串

什么是正则表达式

  • Regular-Expression 使用单个字符串来描述、匹配一系列符合某个句法规则的字符串
  • 说简单了就是按照某种规则去匹配符合条件的字符串

通配符

1
find ./ -name *.txt

REGEXPER

1
^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$

REGEXPER

reg解释
元字符
.任意字符
\w匹配除换行符以外的任意字符
\s匹配字母或数字或下划线或汉字
\d匹配数字
\b单词边界
^开头
$结尾
字符转义
\转义
重复
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复 n 次
{n,}重复 n 次或更多次
{n,m}重复 n 次到 m 次
字符类
[]或
\d[0-9]
\w[a-zA-Z0-9_]
分支条件
``
*分组
()分组
$1获取分组
反义
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了 x 以外的任意字符
[^aeiou]匹配除了 aeiou 这几个字母以外的任意字符
贪婪与懒惰
*?重复任意次,但尽可能少重复
+?重复 1 次或更多次,但尽可能少重复
??重复 0 次或 1 次,但尽可能少重
{n,m}?重复 n 到 m 次,但尽可能少重复
{n,}?重复 n 次以上,但尽可能少重复
其他
\a报警字符(打印它的效果是电脑嘀一声)
\b通常是单词分界位置,但如果在字符类里使用代表退格
\t制表符,Tab
\r回车
\v竖向制表符
\f换页符
\n换行符
\eEscape
\0nnASCII 代码中八进制代码为 nn 的字符
\xnnASCII 代码中十六进制代码为 nn 的字符
\unnnnUnicode 代码中十六进制代码为 nnnn 的字符
\cNASCII 控制字符。比如、cC 代表 Ctrl+C
\A字符串开头(类似^,但不受处理多行选项的影响)
\Z字符串结尾或行尾(不受处理多行选项的影响)
\z字符串结尾(类似$,但不受处理多行选项的影响)
\G当前搜索的开头
\p{name}Unicode 中命名为 name 的字符类,例如、p{IsGreek}
(?>exp)贪婪子表达式
(?<x>-<y>exp)平衡组
(?im-nsx:exp)在子表达式 exp 中改变处理选项
(?im-nsx)为表达式后面的部分改变处理选项
(?(exp)yes|no)把 exp 当作零宽正向先行断言,如果在这个位置能匹配,使用 yes 作为此组的表达式;否则使用 no
(?(exp)yes)同上,只是使用空表达式作为 no
(?(name)yes|no)如果命名为 name 的组捕获到了内容,使用 yes 作为表达式;否则使用 no
(?(name)yes)同上,只是使用空表达式作为 no

REGEXP 对象

JavaScript 通过内置对象 RegExp 支持正则表达式

有两种方式实例化 RegExp 对象

  • 字面量
  • 构造函数
1
2
3
/*字面量*/
var reg = /\bis\b /g;//g 是全局搜索
'He is a Boy. This is a boy. Where is she'.replace(reg,'IS')
1
var reg = new RegExp('\\bis\\b','g')

标识符

  • g:global 全文搜索,不添加,搜索到地一个匹配停止
  • i:ignore case 忽略大小写,默认大小写敏感
  • m:multiple lines 多行搜索

正则表达式笔记
https://bubao.github.io/posts/7d3925ab.html
作者
一念
发布于
2016年8月10日
许可协议