正则表达式是由普通字符和一些无字符组成的文字模式,他可以用于匹配不同的字符串。下面就对一些常用的模式做一下叙述:
在 js 中,我们可以通过使用RegExp对象创建一个新的正则表达式规则;
var reg = new RegExp(pattern,attributes)(构造函数,pattern为字符串,不用'/',attribute为正则表达式的标志)
var reg1 = new RegExp('class');
var reg2 = new RegExp('class','i');
var reg3 = new RegExp('class','ig');
我们也可以通过正则表达式直接量来创建
var reg1 = /class/;
var reg2 = /class/i;
var reg3 = /class/ig;
普通匹配
我们所需要做的就是在‘’里面填写相应的内容以匹配字符串。比如,我们在里面填写‘abc’这代表匹配源字符串中的‘abc’,当源字符串为“aaabc”,”abc”,”ddabcc”均可以匹配到。这种匹配类似于Java中的contains匹配。如果是匹配一些特殊符号,就必须加入转义符号才可用匹配成功。比如‘\?’可以匹配源字符串中的‘?’。
js中正则表达式的特殊符号有:! $ ^ * + = | . ? \ / ( ) [ ] { }
匹配以上特殊符号需加转义字符‘/’.
中括号匹配(匹配单个字符)
在js中,我们也可以使用中括号进行匹配。在’‘里面输入[ab].中括号可以理解为或是关系。当源文件中有’a’ ‘b’ ‘ab’ 均可以匹配成功.也可以用’-‘来限定范围。例如[a-z]匹配所有小写字符,常用的限定范围有以下几种:
- [a-z] //匹配所有小写字符
- [A-Z] // 匹配所有大写字符
- [1-9] // 匹配所有数字
‘^’ 的意思是非,也就是匹配相反的意思.例如[^abc]匹配的是不包含’a’ ‘b’ ‘c’ 或者 ‘abc’其他所有组合的源字符串。
下面有一些常用的通用匹配
- . (匹配除了换行符和其他Unicode行终止符之外的所有字符)
- \w (匹配所有ASCII单子字符,相当于[a-zA-Z0-9] 写的时候注意转义’\w’)
- \W (同上面相反,相当于[^a-zA-Z0-9] )
- \s (匹配任何Unicode空白符)
- \S (同上面相反)
- \d (匹配数字,相当于[0-9])
- \D (同上面相反)
中括号匹配(匹配多个字符)
虽然上面的中括号匹配已经可以匹配所有的字符串,但都是单独匹配的。比如[a]可以匹配到所有包含a的字符串。但这只是单独的。如果我们要匹配包含’ab‘的字符串,用一个[a]就无法完成任务(ps:包含a的字符串和包含ab的字符串不是一个东西,’ac’ ‘ad’ ‘abc’ 可以说是包含a的字符串,但只有’abc’才是包含’ab’的字符串)。故,我们需要用[a][b]来匹配包含’ab’的字符串。但这是不合理的。所以我们需要用其他方法来匹配重复项。在正则表达式中,我们可以使用大括号来匹配次数,下面是一些常用的匹配:
- {n} (匹配前一项n次,例如:ab{2},可以匹配’abb’,不能匹配’ab’或者’a’.ps:前一项指的是大括号前面的字符,上例中指的是字符’b’,如果是[ab]{2}代表源字符串中有’aa’ ‘ab’ ‘bb’即可匹配成功)
- {n,} (匹配前一项至少n次,最多不限)
- {n,m} (匹配前一项至少n次,最多m次。例如:ab{1,2},可以匹配’ab’ ‘abb’但无法匹配’abbb’)
- ? (匹配前一项0次或1次,相当于{0,1})
- ‘+’ (匹配前一项至少1次,相当于{1,})
- ‘*’(匹配前一项0次或者多次,相当于{0,})
特殊
定位符
前面我们提到’^’的用处,它代表非的意思,但是这是写在中括号表达式里面的,如果没有中括号表达式,它表示定位符。例如:’^a’代表以字符’a’开头的字符串。比如’aa’,’ab’.’^ab’就是代表由’ab’开头的字符串。下面是一些常用的定位符
- ^ (匹配字符串的开头,例如’^abd’可匹配’abdaaa’)
- (匹配字符串的结尾,例如′abd $’可匹配’aaaabd’)
- \b (匹配一个词的边界,也就是单词和空格之间的位置,英文用的很多)
- \B (和上面相反)
标志
我们也可以用一些规则来对正则表达式的匹配情况进行说明。规则一般写在/’之后。下面是一些规则
- i (匹配时不分大小写,如/apple/i可以匹配 ‘Apple’ ‘apple’ ‘APPLE’ ‘aPpLe’)
- g(匹配时执行全局匹配模式,找出所有的匹配,而不是找到第一个就停止)
- m(匹配时执行多行匹配模式,即使用^匹配一行的开头和字符串的开头,使用$匹配一行的结尾或字符串的结尾)