正则基础整理
正则表达式有两种创建方式
- 字面量法
var reg =/jack/;
- 构造函数法
var reg = new RegExp("jack","options" ); //需要两个字符串参数,正则的字符串表现,一个可选的标志字符窜(i/g/m);
实例方法
- exec(),接受一个需要应用正则的字符串,若返回包含第一个匹配项信息的数组,如无匹配则返回null
返回的数组包含两个额外属性
- input 应用正则的字符串(即传入的字符串)
- index 匹配项在字符串中的位置
var text ="jack yin and haha"
var reg =/jack yin (and (haha)?)?/g
reg.exec(text) //["jack yin and haha", "and haha", "haha"]
首先匹配整个字符串得到数组第一项,然后是第一个捕获组(and haha)?,最后是(haha)?,若没有捕获组则返回数组只包含一项。(捕获组就是在括号里面的匹配项)
(x)----->匹配‘x’并且记住匹配项。这个被叫做捕获括号。
在exec中如果不使用g(全局匹配),每次调用exec()都返回第一个匹配项,使用全局搜索,每次返回一个匹配项,每次调用exec()会继续查找新匹配项。
2.test()接受一个字符串参数,若模式匹配则返回true,不匹配返回false
常用于if判断中
特殊字符
/ 转义
^ 匹配开始
$ 匹配结束
* 匹配前一项任意次
+ 一次或多次 和{1,}效果相同
? 0或1次 如果?跟在(*、+)量词后面则会使量词变成非贪婪模式,默认是贪婪模式(匹配最多的次数)使用/\d+/非全局匹配“123abc"将返回”123“,如果使用/\d+?/就会只匹配到1
. 匹配除换行符(\n)之外任意单个字符
(x) 捕获括号 匹配到的子串可以通过结果数组[0],[1],[2]...取得
x(?=y)正向肯定查找 /jack(?=haha)/只会匹配后面跟着haha的jack
x(?!y)正向否定查找 /jack(?!haha)/只会匹配后面没有跟haha的jack
x|y x或y
{n} 匹配前一字符出现了n次(n为正整数)
{n,m} 匹配前面字符至少出现n次,最多m次
[a-z.] 字符集合,匹配括号中的任意字符
[^a-z] 反向字符集 ,匹配没有包含在放括号中的字符
[\b]匹配一个退格
\b 匹配一个词的边界/\bm/匹配moon-->m
\B 匹配一个非单词边界(他匹配一个前后字符都是相同类型的位置:都是单词或者都不是单词。一个字符串的开始和结尾都被认为是非单词。) /\Bm./匹配momn --->mn
\cX 当x是一个处于a-z之间的字符的时候,匹配字符串中一个控制符(未校验)
\d 匹配一个数字 等价于[0-9]
\D 匹配一个非数字字符等价于[^0-9]
\f 换页符
\n 换行符
\r 回车符
\s 匹配空白字符(包括空格、换行、换页、制表)
\S 匹配非空字符
var reg =/\S\w/; var str ="foo bar"; reg.exec(str)
["foo"]
var reg =/\s\w/; var str ="foo bar"; reg.exec(str)
[" bar"]
\w 匹配一个单一字符(字母、数字、下划线)等价于[a-zA-Z0-9_]
\W匹配一个非单字字符
var reg=/\W/; var str ="50%"; reg.exec(str)
["%"]
下一节补充正则在string的match/replace/search/split中的应用