• 正则表达式


    正则表达式

    脑子欠抽,对于正则表达式一直看了又忘,看了又忘,还是记录下来一些较常用的东西,方便以后查阅的好。

    1  : 匹配一个位置,用来区分单词边界,hi 可以匹配单词hi,为边界符
    2 .* 表示出了换行符意外的任意字符,并且可以重复任意多个,hi.*hello 匹配hi abcdefb hello
    3 d表示数字,重复次数可以用大括号括起来 0d{2}-d{8}
    4 s匹配任意的空白符
    5 w匹配字符或数字或下划线或汉字等 aw*
    6 d+ 表示1个或者更多连续的数字,和*类似,但*可能是0,而+则至少有1个, w{6}, ?表示出现一次或者不出现
    7 ^匹配开头,$匹配结尾,例如验证QQ号位数 ^d{5,12}$
    8 \字符串转义, *和 .等
    9 [aeiou] 中括号来匹配字符集 [.?!]或者[0-9]等价于d, [a-z0-9A-Z]等价于w(只考虑英文的话)
    10 复杂例子 (?0d{2}[)-]?d{8} 可拆分为 (?--0--d{2}--[)-]?--d{8}
    11 | 分支条件 d{5}-d{4}|d{5}匹配美国的邮政编码,5位数字或者用连字号间隔的9位数字,注意与d{5}|d{5}-d{4}的区别
    12 () 分组,用()分了组之后,你就可以利用{}指定这个分组的重复次数了 (d{1,3}.){3}d{1,3}
    13 反义 W表示非字符数字下划线汉字的字符  

    1 S表示非空白符的字符
    2 D表示非数字的字符
    3 B表示不是单词开头或结束的位置
    4 [^x]中的^类似!的作用,表示非,这里匹配除了x意外的任意字符
    5 [^aeiou]匹配除了aeiou意外的任意字符
    6 <a[^>]+>匹配用尖括号括起来的以a开头的字符串

    14 exec方法:

    1 function execReg(reg, str) {
    2 
    3   var result = reg.exec(str);
    4   alert(typeof result);
    5 }
    6 var reg = /(w)(w)(.+)/; 
    7 var str = 'bbs.bblueidea.com';
    8 execReg(reg,str);

    结果为:

    1 result[0]:bbs.bblueidea.com
    2 result[1]:b
    3 result[2]:b
    4 result[3]:s.bblueidea.com

    由上面例子可见,返回对象[0]就是整个正则表达式所匹配的内容。后续的元素则是各个子正则表达式的匹配内容。


    15.test方法: /abc/.test('abcd') 返回true


    16 g, i, m: g表示全局匹配,i表示忽略大小写,m表示多行匹配,'abcabc'.match(/ab/)将返回["ab"];
    'abcabc'.match(/ab/g)将返回["ab","ab"];


    17 replace方法:'bbs.baidu.com'.replace(/b/g, 'c');在replace函数中使用$引用子正则表达式匹配内容,例如:
    var a = 'haha hoho'.replace(/(w+)s(w+)/, '$2 $1');
    结果为: a='hoho haha';
    由于$的特殊含义,所以如果希望使用$这个字符的话需要写成$$,
    var a = 'haha hoho'.replace(/(w+)s(w+)/, '$$ $$');
    结果为: a='$ $';


    18.search方法,str.search(reg)返回第一次匹配的位置;


    19.split方法,str.split(reg, 'seprator')返回分割后的数组

    20.match方法,str.match(searchValue||regexp)

    match() 方法将检索字符串 stringObject,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。

    如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。

    如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。

    注意:在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。

     一个例子理解正则表达式:

    整理参考:30分钟正则表达式  javascript正则表达式函数详解

  • 相关阅读:
    求解未知矩阵的一些方法
    数二2019-19真题最简单的解法
    极坐标转化为参数方程的题目
    隐函数的不定积分
    Go 语言高性能编程
    1457. Pseudo-Palindromic Paths in a Binary Tree (M)
    0754. Reach a Number (M)
    1345. Jump Game IV (H)
    0091. Decode Ways (M)
    0498. Diagonal Traverse (M)
  • 原文地址:https://www.cnblogs.com/moyiqing/p/regexp.html
Copyright © 2020-2023  润新知