JavaScript 正则表达式总结

本文将对 JavaScript 中的正则表达式语法及其使用做简单总结。

语法

  1. var patt=new RegExp(pattern,modifiers);
  2. var patt=/pattern/modifiers;

pattern: 模式,modifiers: 修饰符

修饰符

  1. i(ignorCase),忽略大小写,执行对大小写不敏感的匹配。
  2. g(globle),执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
  3. m(mutiple),执行多行匹配。

模式

  • 方括号:用于查找某个范围内的字符:

    1
    2
    3
    4
    5
    6
    [abc]       //查找方括号之间的任何字符
    [^abc] //查找任何不在方括号之间的字符
    [0-9] //查找任何从 0 至 9 的数字
    [a-z] //查找任何从小写 a 到小写 z 的字符
    [A-Z] //查找任何从大写 A 到大写 Z 的字符
    [A-z] //查找任何从大写 A 到小写 z 的字符
  • 元字符:元字符(Metacharacter)是拥有特殊含义的字符

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    .           //查找单个字符,除了换行和行结束符
    //代码示例
    var str="That's hot!";
    var patt=/h.t/g;
    str.match(patt) //结果为["hat", "hot"]

    \w //查找单词字符
    //单词字符包括:a-z、A-Z、0-9,以及下划线, 包含 _ (下划线) 字符

    \W //查找非单词字符

    \d //查找数字

    \D //查找非数字字符

    \s //查找空白字符

    \S //查找非空白字符

    \b //匹配单词边界
    //代码示例
    var str="Visit W3CSchool";
    var patt=/\bW3/g; //匹配"W3"开头的字符
    str.match(patt) //结果为["W3"]

    \B //匹配非单词边界
    //代码示例
    var str="Visit schoolW3C";
    var patt=/school\B/g; //匹配不以"school"结尾的字符
    str.match(patt) //结果为["school"]

    \0 //查找NULL字符

    \n //查找换行符

    \f //查找换页符

    \r //查找回车符

    \t //查找制表符

    \v //查找垂直制表符

    \xxx //查找以八进制数 xxx 规定的字符

    \xdd //查找以八进制数 dd 规定的字符

    \uxxxx //查找以十六进制数 xxxx 规定的 Unicode 字符
  • 限定符

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    n+          //匹配任何包含至少一个 n 的字符串
    //例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"

    n* //匹配任何包含零个或多个 n 的字符串
    //例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 //"b",但是不匹配 "A goat grunted"

    n? //匹配任何包含零个或一个 n 的字符串
    //例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"

    n{X} //匹配包含 X 个 n 的序列的字符串。
    //例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的两个 "a",且//匹配 "caaandy." 中的前两个 "a"

    n{X,} //X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。
    //例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 //"caaaaaaandy." 中所有的 "a"

    n{X,Y} //X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。
    //例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 //"a",匹配 "caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即//使原始字符串拥有更多的 "a",匹配项也是 "aaa"

    n$ //匹配任何结尾为 n 的字符串

    ^n //匹配任何开头为 n 的字符串

    () //标记子表达式的开始和结尾,可以保存子表达式以备将来之用
    //例如,A(\d) 与"A0"至"A9"匹配,保存该数字以备将来之用

    | //指示在两个或多个项之间进行选择
    //例如,z|food 与"z"或"food"匹配。 (z|f)ood 与"zood"或"food"匹配。

    ?=n //匹配任何其后紧接指定字符串 n 的字符串
    //代码示例
    var str="Is this all there is";
    var patt=/is(?= all)/g; //匹配其后紧跟" all"的"is"
    str.match(patt) //结果为["is"]


    ?!n //匹配任何其后没有紧接指定字符串 n 的字符串
  • 优先级顺序

运算符 功能
\ 转义符
(), (?:), (?=), [] 括号和中括号
*、+、?、{n}、{n,}、{n,m} 限定符
^、$、\任何元字符 定位点和序列
\ 替换
  • RegExp 对象方法
    • compileRegExpObject.compile(regexp,modifier):编译正则表达式
    • execRegExpObject.exec(string):检索字符串中指定的值。返回找到的值,并确定其位置
    • testRegExpObject.test(string):检索字符串中指定的值。返回 true 或 false
  • 支持正则表达式的 String 对象的方法
    • search,检索与正则表达式相匹配的值
    • match,找到一个或多个正则表达式的匹配
    • replace,替换与正则表达式匹配的子串
    • split,把字符串分割为字符串数组

实例应用

  • js 不规范字符串转json对象
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 预处理字符串: 
    str = '{ id: 8, valueType: 4, value: "中国银行武汉狮子山支行", remark: "houseOrderCompany"}'

    // 正则
    str = str.replace(/(\w+)\s*:/g, function(match, $1) { return '"' + $1 + '":' })
    // 注意,这里使用(\w+),记住匹配项,用于后续的函数处理$1
    // match 为匹配的子字符串,对应$&

    // 结果
    console.log(str)
    // { "id": 8, "valueType": 4, "value": "中国银行武汉狮子山支行", "remark": "houseOrderCompany"}
-------------本文结束感谢您的阅读-------------
0%