JavaScript 正则表达式
正则表达式:
正则表达式(Regular(正常的,常规的) Expression),又称正规表示法、常规表示法。
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
JavaScript 正则表达式上——基本语法 JavaScript正则表达式下——相关方法
可以参考这篇文章,比较像手册,除了转义符号 “\” 都写错为“/”。 手册
定义
JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串
1. 构造函数
var reg=new RegExp('<%[^%>]+%>','g');
注意:如果正则表达式中有变量,则使用构造函数是比较方便的。
2. 字面量
var reg=/<%[^%>]%>/g;
- g: global,全文搜索,默认搜索到第一个结果就会停止
- i: ingore case,忽略大小写,默认大小写敏感
- m: multiple lines,多行搜索(更改^ 和$的含义,使它们分别在任意一行对待行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配)
方法:
1. reg.test(strObject)
返回布尔值 用于测试字符串参数中是否存正则表达式模式,如果存在则返回true,否则返回false
2. reg.exec(strObject)
返回数组或null.
方法用于正则表达式模式在字符串中运行查找,如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。
除了以上两种方法,有些字符串函数可以传入RegExp对象作为参数,进行一些复杂的操作
预定义元字符
预定义特殊字符
字符 含义
\t 水平制表符 (Matchs a Tab)
\r 回车符 Matches a carriage return
\n 换行符 Matches a carriage return
\f 换页符 Matches a form feed
\cX 与X对应的控制字符(Ctrl+X)
\v 垂直制表符 Matches a vertical tab (U+000B).
\0 空字符 Matches a NULL (U+0000) character
可以使用元字符[]来构建一个简单的类(类:匹配其中的一项就可以),所谓类是指,符合某些特征的对象,是一个泛指,而不是特指某个字符了
[abc] // 匹配a或b或c
元字符^创建反向类/负向类,反向类的意思是不属于XXX类的内容
[^abc] // 匹配a或b或c之外的字符
范围类
[]组成的类内部是可以连写的,我们还可以这样写 [a-zA-Z] // 匹配大写字母或小写字母中的某个字母
预定义类
正则表达式为我们提供了几个常用的预定义类(内置的类)来匹配常见的字符
字符 等价类 含义
. [^\n\r] 除了回车符和换行符之外的所有字符
\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] 非单词字符
边界
正则表达式还提供了几个常用的边界匹配字符
字符 含义
^ 以xx开头
$ 以xx结尾
\b 单词边界,指[a-zA-Z_0-9]之外的字符
\B 非单词边界
量词
字符 含义
? 出现零次或一次(最多出现一次) Equivalent to {0,1}
.
+ 出现一次或多次(至少出现一次) Equivalent to {1,}
.
* 出现零次或多次(任意次) Equivalent to {0,}.
{n} 出现n次
{n,m} 出现n到m次
{n,} 至少出现n次
贪婪模式与非贪婪模式
量词在默认下是尽可能多的匹配的,也就是大家常说的贪婪模式
非贪婪模式,在量词后加上 ?
分组
使用()就可以达到次目的,我们称为分组
x|y Matches either 'x' or 'y'. 匹配x或是y
前瞻
表达式 含义
exp1(?=exp2) 匹配后面是exp2的exp1
exp1(?!exp2) 匹配后面不是exp2的exp1