js正则表达式

来源:互联网 发布:卖家怎么开淘宝客 编辑:程序博客网 时间:2024/06/06 03:17

正则表达式的基础知识:


字面量的形式

ECMAscript通过RegExp引用类型来支持正则表达式,使用下面语法就可以创建一个正则表达式:

 var expression = /pattern / flags;
  • 模式(patten):可以是简单或者复杂的正则表达式,可以包含字符串,限定符,分组,向前查找及反向引用;
  • 标志(flags): 用来标志正则表达式的行为,主要有一下三种标志:
    g:表示全局模式,即模式将被应用到所有字符串,而不是在发现第一个匹配符时立即停止;
    i:表示不区分大小写,即在确定匹配项时,忽略patten和字符串的大小写
    m: 表示多行模式,即在达到一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项;

例:

 var pattern1 = /at/g;//匹配字符串中所有‘at’的实例 var pattern2 = /[bc]at/i;//匹配第一个‘bat’,或者‘cat',不区分大小写var pattern3 = /.at/gi;//匹配所有以‘at’结尾的三个字符串组合,不区分大小写

注意啦: 模式中使用元字符时都应该转义, // () [] {} \ ^ $ | ? * . 等
例子:

  var pattern = /\[bc\]at/i;//匹配第一个"[bc]at",不区分大小写


使用RegExp构造函数: new RegExp(”patten”,”flags”);

RegExp构造函数也可以创建一个正则表达式,它接收两个参数,第一个时模式patten,第二个参数可选,是标志flags;
由于,第一个参数是字符串,所以在有些情况虾要对字符串进行双重转义,所有元字符都应被双重转义;一些已经被转义的字符也是如此,例如,\n(字符\在字符串中被转义成\,而在正则表达式字符串中就被转义成\\);
例如:
字面量模式:/[bc]at/ 对应的字符串模式为:”\ [bc\ ]at “;
字面量模式:/\w\hello\123/对应的字符串模式为:”\w\\hello\\123”;

例如:

//匹配第一个"bat"或者"cat";var pattern = new RegExp('[bc]at', 'i');


模式中的特殊字符

  • 字符类:
    \w 匹配任何ASCII单字符[a-zA-z0-9];
    \W 匹配任何ASCII但字符之外的字符;
    \s 匹配任何Unicode空白符
    \S 匹配除任何Unicode空白符之外的字符
    \d 匹配任何数字[0-9]
    \D 匹配除了数字[0-9]的任何字符
    […] 匹配方括号里的所有字符
    [^…] 匹配非方括号里的所有字符

  • 重复类
    {n} 匹配前一项n次
    {n,} 匹配前一项至少n次,至多不限
    {n, m} 匹配前一项最少n次,最多m次
    {?} 匹配前一项0次或者1次
    {+} 匹配前一项至少一次
    {*}匹配前一项0次或者多次

  • 定位符

    ^ 匹配字符串的开头
    $ 匹配字符串的结尾
    \b 匹配一个单词的边界

  • 分组:
    (…)将几个项目组合成一个单元
    (?…)与(…)类似,只是不记忆与该组所匹配的内容




    常用的正则表达式pattern

  • 正则表达式 [^\x00-\xff]能匹配双字节字符,下面方法用来获取字符串长度,规则为:单字节长度为1、汉字等双字节长度为2;

 function getLength(str){       return str.replace(/[^\x00-\xff]/g, 'aa').length;//把所有非单字节的字符转换成2个单字符        }


- 匹配邮箱

[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

判断一个字符串str是否是邮箱格式

function isEmail(str){   var reg = /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/;    if (! reg.test(str)){    alert("输入的不是邮箱");  } else {     alert("输入的是邮箱格式");  }



- 匹配11位手机号码

  function isPhoneNunmber(str){ var reg = /\d{11}/;     if ((str.length != 11) ||  (! reg.test(str))){        alert("输入的不是11位号码");     } else {       alert("输入的是11位号码");     }}