初识正则表达式

概念

*正则表达式(RegExp)*是强大的字符串匹配工具,可以极大地简化普通字符串操作容易出问题的东西。正则表达式只能操作字符串,且区分大小写。

基本语法

  1. 直接量语法: /pattern/attributes
    1
    var re=/a/i;
  2. 创建 RegExp 对象的语法::new RegExp(pattern, attributes);
    1
    var re=new RegExp('A','i');
    注意:参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。参数 attributes 是一个可选的字符串,包含属性 “g”、”i” 和 “m”,分别用于指定全局匹配、区分大小写的匹配和多行匹配。

RegExp对象方法:

  1. test()方法:检测一个字符串是否匹配某个模式。返回值是 true 或 false。
    1
    2
    var patt1=new RegExp("e");
    document.write(patt1.test("The best ")); //该字符串中存在字母 "e",所以输出是true
  2. exec()方法:检索字符串中的正则表达式的匹配。返回值是被找到的值。如果没有发现匹配,则返回 null。
    1
    2
    var patt1=new RegExp("e");
    document.write(patt1.exec("The best ")); //该字符串中存在字母 "e",所以输出是e
  3. compile()方法:改变正则表达式的模式。
    1
    2
    3
    4
    5
    6
    //在字符串中全局搜索 "man",并用 "person" 替换。然后通过 compile() 方法,改变正则表达式,用 "person" 替换 "man" 或 "woman",
    var str="Every man in the world! Every woman on earth!";
    patt=/(wo)?man/g;
    patt.compile(patt);
    Str2=str.replace(patt,"person");//用 "person" 替换 "man" 或 "woman",:
    document.write(str2);

支持正则表达式的 String 对象的方法

  1. Search()方法:检索与正则表达式相匹配的值。不执行全局匹配,它将忽略标志 g,同时它也没有regexp对象的lastIndex的属性,且总是从字符串开始位置进行查找,总是返回匹配的第一个位置。
    1
    2
    var str="hello,world!"
    document.write(str.search(/world/)); //结果返回6,即w所在的位置
  2. match()方法:找到一个或多个正则表达式的匹配,返回指定的值,而不是字符串的位置。
    1
    2
    var str='abcd 3458 gea2 ef';
    document.write(str.match(/\d+/g));//结果为3548,2
  3. Replace()方法:查找并替换与正则表达式匹配的子串。
    1
    2
    var str="good girl"
    document.write(str.replace(/girl/, "boy"));//使用boy替换girl
  4. Split()方法:把一个字符串分割为字符串数组。
    1
    2
    var str="How are you ?"
    document.write(str.split("") + "<br />");//结果为"H,o,w, ,a,r,e, ,y,o,u, ,?"

元字符

元字符是拥有特殊含义的字符,javascript中常见的元字符如下:

  1. 元字符*.* :用于匹配任何单个字符(除了换行符以外)。
    1
    2
    var str = “abcde”;
    document.write(str.match(/a.c/)); // 结果为“abc”
  2. \w:查找任意一个字母或数字或下划线。
    1
    2
    3
    var str = “abcde”;// 匹配单个字符,找到一个直接返回
    document.write(str.match(/\w/)); //结果为“a”
    document.write(str.match(/\w+/)); //结果为“abcde”
  3. \W:查找非单词的字符.
    1
    2
    var str = “abcde”;// 匹配单个字符,没有找到返回null
    document.write(str.match(/\W/)); // 结果为“null”
  4. \d:匹配一个数字字符。
    1
    2
    var str = “abcde111”;
    document.write(/\d/g.exec(str)); //结果为“1”
  5. \D:匹配一个非数字字符。
    1
    2
    var str = “abcde111”;
    document.write(/\D+/g.exec(str)); //结果为“abcde”
  6. \s:匹配任何空白字符,包括空格,制表符,换行符等等。
    1
    2
    var str=”Is this all there is?”;
    document.write(/\s/g.exec(str)); // 结果为“ ”
  7. \S:匹配任何非空白字符。
    1
    2
    var str=”Is this all there is?”;
    document.write(/\S+/g.exec(str)); //结果为“Is”
  8. \b:匹配一个单词边界,也就是指单词和空格间的位置。
    1
    2
    var str=”Is this all there is?”;
    document.write(/\bthis\b/g.exec(str)); //结果为“this”
  9. \B:匹配非单词边界。
    1
    2
    var str=”Is this all there is?”;
    document.write(/\Bhi/g.exec(str)); // 结果为“hi”
  10. \n:匹配一个换行符;返回换行符被找到的位置。如果未找到匹配,则返回 -1。
    1
    2
    var str=”Is this all \nthere is?”;
    document.write(/\n/g.exec(str));

正则的方括号

方括号包含一系列字符,能够匹配其中任意一个字符,如[abc]可以匹配abc中任意一个字符,使用[^abc]包含的字符abc,则能够匹配abc字符之外的任何一个字符,只能是一个字符。常见的几种方括号的用法如下:

  • [abc]:查找在方括号中的任意一个字符;
  • [^abc]: 查找不在方括号中的任意一个字符;
  • [0-9]: 查找0-9中的任意一个数字;
  • [a-z]: 查找从小写a到z中的任意一个字符。

量词

  1. n*:匹配零个或者多个n的字符串。
    1
    2
    var str = "hello longen hello";
    document.write(str.match(/el*/g)); //结果为"ell"
  2. n+:匹配至少包含一个或者多个n的字符串。
    1
    2
    var str = "hello longen";
    document.write(str.match(/l+/g)); //结果为"ll"
  3. n?:匹配零个或者1个n的字符串,可以匹配n字符串,也可以只匹配一个n;先尽量匹配,如没有匹配到,就回溯,再进行不匹配;
    1
    2
    var str = "hello longen hello";
    document.write(str.match(/hu?/g)); //结果为"h"
  4. n{x}:匹配包含x个的n的序列字符串。X必须是数字。
    1
    2
    var str="100, 1000 or 10000?";
    document.write(str.match(/\d{4}/g)); //结果为["1000", "1000"]
  5. n{x,y}:匹配包含至少x个的n字符串,最多y个n字符串。
    1
    2
    var str="100, 1000 or 10000?";
    document.write(str.match(/\d{3,}/g)); //结果为["100", "1000", "1000"]
  6. n{x,}:匹配至少包含x个n序列的字符串;
    1
    2
    var str="100, 1000 or 10000?";
    document.write(str.match(/d{3,}/g)); //结果为["100", "1000", "1000"]
  7. n$:匹配任何以n结尾的字符串;
    1
    2
    var str="my name is longen";
    document.write(str.match(/en$/g)); //结果为["en"]
  8. ^n:匹配任何以n开头的字符串;
    1
    2
    var str="my name is longen";
    document.write(str.match(/^my/g)); //结果为"my"
  9. ?=n:匹配任何其后紧接指定字符串n的字符串;
    1
    2
    var str="my name is longen";
    document.write(str.match(/na(?=m)/g)); //结果为"na"
  10. ?!n:匹配任何其后不紧接n的字符串
    1
    2
    var str="my name is longen";
    document.write(str.match(/na(?!ma)/g)); //结果为"na"
  11. ^ 以字符串开始的地方匹配,不匹配任何字符;
  12. $ 以字符串结束的地方匹配,不匹配任何字符;

应用

正则表达式在javascript中的应用挺广泛的,可以说带来很多的方便,这里就列举两个应用:

  1. 行首行尾去空格
    1
    2
    3
    var str=' www ee  d;fl  ';
    var re=/^\s+|S+&/;//行首行尾去空格
    document.write('('+str.replace(re,''));
  2. 校验邮箱
    1
    2
    3
    4
    5
    var re=/^\w+@[a-z0-9]+\.[a-z]{2-4}$/;
    if(re.test(oTxt.value))
    { alert('right'); }
    else
    { alert('wrong'); }