正则表达式

197 阅读2分钟

使用场景:表单判断 对字符串进行匹配

创建

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

字面量

var pattern = /\[bc\]at/i;匹配第一个"[bc]at",不区分大小写

构造函数

var pattern = new RegExp("[bc]at","i");

由于构造函数的模式参数是字符串,所有元字符都必须双重转义

正则表达式匹配模式的标志

  • g:全局模式,应用于所有字符串
  • i:不区分大小写模式
  • m:多行模式

元字符

元字符必须要转义

元字符:( [ { \ ^ $ | ) ? * + . ] }

字符 含义
\t 水平制表符
\r 回车符
\n 换行符
\f 换页符
\v 垂直制表符
\0 空字符

取反

^

var reg = /[^abc]/ig;

范围类

var reg = /[0-9]/;//字符为0-9任何一个
var reg = /[a-z]/;
var reg = /[0-9a-zA-Z]/;

预定义类

字符 等价类 含义
. [^\r\n] 除了回车符和换行符之外的所有字符
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\s [\t\n\x0B\f\r] 空白符
\S [^\t\n\x0B\f\r] 非空白符
\w [a-zA-Z_0-9] 大小写字母,数字,下划线
\W [^a-zA-Z_0-9] 除大小写字母,数字,下划线

正则1.jpg

边界

字符 含义
^ 以xxx开头
$ 结尾
\b 单词边界
\B 非单词边界
var str = 'hello1 hello9orld hello2 123-hello8-456 \r \t javascript \n hello3';
str.match(/\bhello\d\b/g);//["hello1", "hello2", "hello8", "hello3"]
str.match(/\bhello\d/g);//["hello1", "hello9", "hello2", "hello8", "hello3"]
str.match(/hello\d\b/g);//["hello1", "hello2", "hello8", "hello3"]

量词

字符 含义
? 出现零次或一次(最多出现一次)
+ 出现一次或多次(至少出现一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m次
{n,} 至少出现n次
var str = 'hello1 hello9orld hello2 123-hello8-456 \r \t javascript \n hello3';
str.match(/hello.*/g);// ["hello1 hello9orld hello2 123-hello8-456 ", "hello3"]
str.match(/hello.\S{4}/g);//["hello9orld", "hello8-456"]

贪婪与非贪婪模式

  • 贪婪模式 量词在默认下是尽可能多的匹配的
  • 非贪婪模式 让正则表达式尽可能少的匹配,也就是说一旦成功匹配不再继续尝试,在量词后加上?即可

分组

var reg = /(hello){20}/

var reg = /hello|world/

前瞻

表达式 含义
exp1(?=exp2) 匹配后面是exp2的exp1
exp1(?!exp2) 匹配后面不是exp2的exp1
var str = 'goodByron123';
var str2 = 'goodCasper123';
str.match(/good(?=Byron)/);//["good"]
str2.match(/good(?=Byron)/);//null
str.match(/good(?!Byron)/);//null
str2.match(/good(?!Byron)/);//["good"]

方法

.test()

用于测试字符串参数中是否存正则表达式模式

var reg = /\d+\.\d{1,2}$/g;
reg.test('123.45');//true
reg.test('a.45');//false

.exec()

正则表达式模式在字符串中运行查找。

如果exec()找到了匹配的文本,则返回一个结果数组,否则返回 null。 包含两个额外的属性:

  • index:匹配项在字符串上的位置
  • input:应用正则表达式的字符串