1、两种方式创建正则表达式
JS风格:var re = /ab+c/;
Perl风格:/ab+c/;
2、字符串与正则配合
-->search:返回出现的位置,对大小写敏感(使用/i(忽略大小写));
-->match:返回获取的项目,匹配不到则返回null;
-->replace:替换所有的匹配(敏感词过滤)(str.replace(/mic),"tihuan");
-->exec:在字符串中执行查找匹配的方法,它返回一个数组(未匹配到则返回null);
-->test:在字符串中测试是否匹配的方法,它返回true或false。
3、边界
字符 | 含义 |
^ | 以xx开头 |
$ | 以xx结尾 |
\b | 单词边界,指[a-zA-Z_0-9]之外的字符 |
\B | 非单词边界 |
4、量词
字符 | 含义 |
? | 出现零次或一次(最多出现一次) |
+ | 出现一次或多次(至少出现一次) |
* | 出现零次或多次(任意次) |
{n} | 出现n次 |
{n,m} | 出现n到m次 |
{n,} | 至少出现n次 |
5、贪婪模式
'123456789'.match(/\d{3,5}/g); //["12345", "6789"] 会尽可能多匹配,即先5个再4个非贪婪,一旦成功匹配则不再继续尝试, 在量词后加上 ?
'123456789'.match(/\d{3,5}?/g); //["123", "456", "789"]
6、前瞻
表达式 | 含义 |
exp1(?=exp2) | 匹配后面是exp2的exp1 |
exp1(?!exp2) | 匹配后面不是exp2的exp1 |
(/good(?=Byron)/).exec('goodByron123'); //['good']
(/good(?=Byron)/).exec('goodCasper123'); //null
(/bad(?=Byron)/).exec('goodCasper123');//null
7、分组
中括号表示范围内选择,大括号表示重复次数。小括号允许我们重复多个字符。
//分组+量词
alert(/(dog){2}/.test("dogdog"))//true
//分组+范围
alert("baddad".match(/([bd]ad?)*/))//baddad,dad
//分组+分组
alert("mon and dad".match(/(mon( and dad)?)/))//mon and dad,mon and dad, and dad
var reg = /(red|black|yellow)!!/;
alert(reg.test("red!!"))//true
alert(reg.test("black!!"))//true
alert(reg.test("yellow!!"))//true