正则表达式

今天复习了一下正则表达式,记录一下老是忘记的东西

注:exec方法返回的其实并不是匹配结果字符串,而是一个对象,里面含有匹配结果字符串,在这里为了简单简写了。

一,反向引用:

形式如下:/(子正则表达式)\1/

例子:

1、reg = /\w/;      \w表示单词字符,等同于字符集合[a-zA-Z0-9_]。

    str='bluesky';

    reg.exec(str);    返回b

2、reg = /(\w)\1/;  

    str='bluesky';

    reg.exec(str);    返回null

    这里的“\1”就叫做反向引用,它表示的是第一个括号内的子正则表达式匹配的内容。在上面的例子中,第一个括号里的(\w)匹配了 b,因此“\1”就同样表示b了,在余下的字符串里自然找不到b。

3、reg = /(\w)(\w)\2\1/;   \n表示引用第n项子正则表达式,有几个子正则表达式我们就可以使用几个反向引用。

    str='woow';

     reg.exec(str); 返回woow,第一个括号匹配到w,第二个括号匹配到o,而\2\1则表示ow

4、reg = /(\w)(\w)/; 

    str='bluesky'; 

     reg.exec(str);    返回bl,b,l      

bl是整个正则匹配的内容,b是第一个括号里的子正则表达式匹配的内容,l是第二个括号匹配的内容。因为exec方法会将子正则表达式的匹配结果保存到返回的结果中。

如果不想记录子正则表达式的匹配结果:(?:pattern)就可以避免

如:1、reg = /^(b|c).+/;      匹配以b或c开头,以及其后的 所有的非换行字符。

             str='bbc.haha.com';

            reg.exec(str);     返回bbc.haha.com, b(这里的b就是子正则表达式的匹配结果)

        2、reg = /^(?:b|c).+/;   

             str='bbc.haha.com';

            reg.exec(str);     返回bbc.haha.com ,不再保存子正则表达式匹配到的b

        3、reg = /^(?:b|c)\1/;

             str='bbc.haha.com';

             reg.exec(str);   返回null,由于根本没有记录括号内匹配的内容,自然没有办法反向引用了

二、正向预查

形式:(?=pattern)  ,意思就是:要匹配的字符串,后面必须紧跟着pattern

如:1、reg = /beautiful(?=8)/;  匹配beautiful,且后面必须紧跟着8

            str='beautiful9';

            reg.exec(str);  返回null

        2、reg = /beautiful(?=8)/;  匹配beautiful,且后面必须为8

             str='beautiful8';

            reg.exec(str);  返回beautiful

     需要注意的是,括号里的内容并不参与真正的匹配,只是检查一下后面的字符是否符合要求而已

形式(?!pattern)和?=恰好相反,要求字符串的后面不能紧跟着某个pattern

如:1、reg = /beautiful(?!8)/;  匹配beautiful,且后面不为8

             str='beautiful9';

            reg.exec(str);  返回beautiful

三、匹配元字符

我们之前用过*,+,?之类的符号,它们在正则表达式中都有一定的特殊含义,类似这些有特殊功能的字符都叫做元字符。例如:

reg = /a*/;  表示任意个a,但是如果我们真的想匹配’a*’这个字符串的时候怎么办呢?只要将*转义了就可以了,如下:

reg = /c\*/;

同理,要匹配其他元字符,只要在前面加上一个“ \ ”。 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。