正则

字符组

顾名思义,字符组是一组字符,表示在同一位置可能出现的多种字符。语法是在方括号 [ ] 之间列出可能出现的字符。字符组支持 - 范围表示法、^ 排除型字符组。

字符组含义
[ab]匹配 a 或 b
[0-9]匹配 0 或 1 或 2 ... 或 9
[^ab]匹配 除 a、b 任意字符

 

 

 

 

 

 对于常见 [0-9]、[a-z] 等字符组,正则表达式提供简记形式

字符组含义
.表示 [^\n
\d表示 [0-9],数字字符
\D表示 [^0-9],非数字字符
\w表示 [_0-9a-zA-Z],单词字符,注意下划线
\W表示 [^_0-9a-zA-Z],非单词字符
\s表示 [ \t\v\n\r\f],空白符
\S表示 [^ \t\v\n\r\f],非空白符

 

 

 

 

 

 

 

 

 

量词

量词也称重复,可以匹配固定或非固定长度字符。其常见形式是 {m,n}注意逗号之后绝不能有空格,表示连续出现最少 m 次,最多 n 次。

量词又可分为,匹配优先量词(贪婪量词)、忽略优先量词(惰性量词)。对于不确定是否要匹配时,匹配优先量词会尝试匹配,忽略量词则选择不匹配。

const greedyRe = /\w+/
const lazyRe = /\w+?/

greedyRe.exec('abc')
lazyRe.exec('abc')
匹配优先量词忽略优先量词含义
{m,n}{m,n}?表示至少出现 m 次,至多 n 次
{m,}{m,}?表示至少出现 m 次
{m}{m}?表示必须出现 m 次,等价 {m,m}
???等价 {0,1}
++?等价 {1,}
**?等价 {0,}

 

 

 

 

 

 

 

 

括号

括号在正则中主要有三种用途:

  • 分组,将相关的元素归拢,构成单个元素,可通过 $数字 提取相应顺序分组
  • 多选结构,(...|...),规定可能出现的多个子表达式;引用分组,通过 \数字 形式引用,即反向引用
  • 存储子表达式匹配文本,供之后引用。

分组示例,将 yyyy-mm-dd 时间,替换 mm/dd/yyyy 格式。

const re = /(\d{4})-(\d{2})-(\d{2})/
const str = '2018-01-12'
const result = str.replace(re, '$2/$3/$1')
console.log(result)
// => '01/12/2018'

反向引用匹配成对标签,如<h1>title</h1>。(注:未考虑标签属性和标签嵌套情形)

const re = /<([a-zA-Z0-9]+)>.*?<\/\1>/
const str = '<h1>title</h1>'
const result = re.test(str)
console.log(result)
// => true
字符含义
(x)捕获括号。匹配 x 并且捕获匹配项。 /(foo)/ 匹配且捕获 "foo bar." 中的 "foo"。被匹配的子字符串可以通过 元素[n] 中找到,或 RegExp 对象的属性 $n 中找到。会消耗性能,如果需要捕获的数组,可以使用非捕获括号
\n

反向引用(back reference),指向正则表达式中第 n 个括号(从左开始数)中匹配的子字符串。/apple(,)\sorange\1/ 匹配 "apple, orange, cherry, peach." 中的 "apple,orange,"(最后的,号)

(?:x)非捕获括号(non-capturing parentheses)。匹配 x 不会捕获匹配项。匹配项不能够从结果再次访问。(推荐)

 

 

 

 

 

 

 

 

锚点与断言

锚点含义
^匹配开头,多行匹配中匹配行开头
$匹配结尾,多行匹配中匹配行结尾
\b单词边界,\w 与 \W 之间位置
\B非单词边界
(?=p)该位置后面字符要匹配 p
(?!p)该位置后面字符不匹配 p

 

 

 

 

 

 

 

 

修饰符

修饰符含义
i不区分大小写匹配
m允许匹配多
g执行全局匹配

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值