美文网首页
JS正则表达式

JS正则表达式

作者: amnsss | 来源:发表于2015-10-04 21:38 被阅读81次

    优先权顺序


    从高到底
    \ 转义符
    (), (?:), (?=), [] 圆括号和方括号
    *, +, ?, {n}, {n,}, {n,m} 限定符
    ^, $, \anymetacharacter 位置和顺序

    字符类匹配


    . 除了换行符和其他Unicode行终止符之外的任意字符
    \w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
    \W 任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9]
    \s 任何Unicode空白符
    \S 任何非Unicode空白符的字符
    \d 任何ASCII数字,介于[0-9]
    \D 除了ASCII数字之外的任何字符,等价于[^0-9]
    \b 退格直接量

    字符类:锚字符 匹配


    $ 匹配字符串的结尾,在多行检索中,匹配一行的结尾
    ^ 匹配字符串的开头,在多行检索中,匹配一行的开头
    \A 只有匹配字符串开始处
    \b 匹配单词边界,词在 []内时无效
    \B 匹配非单词边界
    \G 匹配当前搜索的开始位置
    \Z 匹配字符串结束处或行尾
    \z 只匹配字符串结束处

    正则表达式修饰符


     字符      含义                                                                           
    i        执行不区分大小写的匹配                                                           
    g        执行一个全局匹配,即找到所有匹配而非一次匹配
    m        多行匹配模式,^匹配一行的开头和字符串开头,$匹配行的结束和字符串的结尾
    

    RegExp 对象常用方法


    test():检索字符串中的指定值。返回值是布尔值。
    exec():返回一个数组,数组中的第一个条目是第一个匹配,其他的是反向引用
    compile() 既可以改变检索模式,也可以添加或删除第二个参数。
    

    exec()方法

    如果匹配返回一个数组,格式如下:
    [匹配的文本[,括号匹配的文本(可能多项)] ],属性:匹配到位置下标(index),原始文本(input)]
    <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec">详见mdn</a>,否则返回null, 然后更新正则表达式的属性,例如lastIndex, 下次匹配的下标。果然不是全局模式"g",lastIndex一直为0;

    String 对象中常用正则相关方法


    方法                     含义
    match(pattern)          返回 pattern 中的子串或 null
    replace(pattern, replacement)   用 replacement 替换 pattern
    search(pattern)        返回字符串中 pattern 开始位置(查找到即返回,没有全局模式) 没有返回-1
    split(pattern)            返回字符串按指定 pattern 拆分的数组
    

    match方法

    /*使用 match 方法获取匹配数组*/ 
    var pattern = /box/ig;//全局搜索 
    var str = 'This is a Box!,That is a Box too';           
    alert(str.match(pattern)); //匹配到两个 Box,Box 全局模式下没有反向应用
    console.log(str.match(pattern).length);//获取数组的长度 2
    /* 非全局模式下类似exec()返回结果,但只能匹配到第一个, 不会像exec()会更新正则表达式lastIndext
    所以以上去掉'g'结果为:
    ["Box", "B", index: 10, input: "This is a Box!,That is a Box too"] 数组长度为2, 后面是属性
    */
    

    正则表达式转义


    \ / [ ] () { } ? + * | . ^ $
    

    需要用\来转义, 表示匹配本身. \前缀不能使字母或数字字面化, 特殊转义:

    \f :换页符   \n :换行符   \r :回车符   \t :制表(tab)符
    

    常用的正则表达式


    去掉首尾空白

    /^\s+ | \s+$/g
    

    匹配中文字符

    [\u4e00-\u9fa5]
    

    匹配双字节字符(包括汉字在内)

    [^\x00-\xff]
    评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
    

    匹配空白行

    \n\s*\r
    

    匹配HTML标记

    <(\S*?)[ ^>]*>.*?</\1>|<.*? />
    

    匹配Email地址

    \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    

    匹配网址URL

    [a-zA-z]+://[^\s]*
    

    其他

    默认匹配是贪婪匹配,匹配尽可能长的字符串
    有?修饰(+?, *?...)匹配尽可能短的字符串

    疑惑点


    • .+-等一些字符在[]内不用转义

    参考


    参考博客
    正则表达式测试

    相关文章

      网友评论

          本文标题:JS正则表达式

          本文链接:https://www.haomeiwen.com/subject/qazucttx.html