var regex = /ab{2,5}c/g
{2,5}表示重复2-5个都符合 /g全部匹配
/a[1,2]c/g
[1,2]表示有其中一个符合
修饰符
/g 全局
/i 忽略大小写
/s 配合.可以匹配任意单个字符
/u 有一些Unicode字符超过一个字节,正则就无法正确的识别它们。u修饰符就是用来处理这些不常见的情况的。
[1,2,3,4]可以用范围字符-表示[1-4]
[^abc] 字符组第一位放^,表示反义,不能有abc其中一个 排除
元字符含义
\b 匹配一个单词边界(boundary)
\B 匹配一个非单词边界
\d 匹配一个数字字符(digit)
\D 匹配一个非数字字符
\s 匹配一个空白字符(space)
\S 匹配一个非空白字符
\w 匹配一个字母或者一个数字或者一个下划线(word)
\W 匹配一个字母、数字和下划线之外的字符
量词 含义
? 重复零次或者一次
+ 重复一次或者多次,也就是至少一次
* 重复零次或者多次,也就是任意次数
{n} 重复n次
{n,} 重复n次或者更多次
{n,m} 重复n次到m次之间的次数,包含n次和m次
\d = [0-9] \D = [^0-9] \w = [0-9a-zA-Z_](表示数字大写字母下划线) \W=非单词字符 \S非空白符 \s空白符
.表示 \n之外的任意字符
1零宽肯定先行断言
'CoffeeScript JavaScript javascript'.match(/\b\w{4}(?=Script\b)/);
// ["Java"]
这四个字母要满足以下条件:紧跟着的应该是Script字符串,而且Script字符串应该是单词的结尾部分。
2零宽肯定后行断言
语法是圆括号内最左边加上?<=标识。
'演员高圆圆 将军霍去病 演员霍思燕'.match(/(?<=演员)霍\S+/);
// ["霍思燕"]
3.零宽否定先行断言
语法是圆括号内最左边加上?!标识。
'TypeScript Perl JavaScript'.match(/\b\w{4}(?!Script\b)/);
// ["Perl"]
4.零宽否定后行断言
法是圆括号最左边加上?<!标识。
'演员高圆圆 将军霍去病 演员霍思燕'.match(/(?<!演员)霍\S+/);
// ["霍去病"]
'<App>hello regex</App>'.match(/<([a-zA-Z]+)>.*<\/\1>/)
这时候就要用到正则的捕获特性。正则内捕获使用\数字的形式,分别对应前面的圆括号捕获的内容。这种捕获的引用也叫反向引用。
'我喜欢高圆圆'.match(/我喜欢(?:陈乔恩|高圆圆)/);
只要在圆括号内最前面加上?:标识,就是告诉正则引擎:我只要这个整体
2.分支结构
| 表示其中之一 (是懒性的)
3. 贪婪匹配和懒性匹配
/\d{2,5}/g 数字2-5位都可以 (贪婪匹配)
/\d{2,5}?/g 数字最少的可以,2个够了就不继续找了 (懒性匹配)
4 对电话号位数进行3,4,4加空格 $1表示括号内第一个匹配的内容
phoneNumber.replace(/(^\d{3}|\d{4}\B)/g, '$1 '));