初探JS正则表达式
1.概述
    正则表达式是一个描述字符模式的对象。Javascript的正则表达式语法的是Perl5的正则表达式的子集。JS正则表达式有两种使用方式,文本模式和RegExp对象模式,实例如下:
var patern = /java/ig; //文本模式 var patern = new RegExp(/java/, 'ig'); //对象模式
注:ES3中RegExp共用一个对象,ES5每次调用产生一个新对象
2.正则表达式使用的主要字符和元字符
    2.1直接量字符
| 
 字符 
 | 
 匹配 
 | 
| 
 字母和数字 
 | 
自身 | 
| 
 \o 
 | 
 NUL字符(\u0000) 
 | 
| 
 \t 
 | 
 制表符(\u0009) 
 | 
| 
 \n 
 | 
 换行符(\u000A) 
 | 
| 
 \v 
 | 
 垂直制表符(\u000B) 
 | 
| 
 \f 
 | 
 换页符(\u000C) 
 | 
| 
 \r 
 | 
 回车符(\u000D) 
 | 
| 
 \xnn 
 | 
 十六进制数,nn指拉丁字符 
 | 
| 
 \uxxxxx 
 | 
十六进制数,xxxx指unicode字符 | 
| 
 \cX 
 | 
 控制字符^X 
 | 
2.2字符类
| 
 字符 
 | 
 匹配 
 | 
| 
 [...] 
 | 
 方括号内的任意字符 
 | 
| 
 [^...] 
 | 
除方括号外的任意字符 | 
| 
 . 
 | 
 除换行符和其他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] 
 | 
 退格直接量 
 | 
| 
 字符 
 | 
含义 | 
| 
 {n,m} 
 | 
 匹配前一项,至少n次,不超过m次,[n,m) 
 | 
| {n,} | 
 匹配前一项,至少n次或者更多次,[n,无穷) 
 | 
| 
 {n} 
 | 
 匹配前一项n次,==n 
 | 
| 
 ? 
 | 
匹配前一项,0到1次,0||1 | 
| 
 + 
 | 
 匹配前一项,1到多次,[1,无穷) 
 | 
| 
 * 
 | 
匹配前一项,0次到多次,[0,无穷) | 
2.4选择、分组和引用字符
| 
 字符 
 | 
 含义 
 | 
| 
 | 
 | 
 选择,匹配左边或者右边的表达式 
 | 
| 
 (...) 
 | 
分组,可使用重复符进行修饰(记忆) | 
| 
 (?:...) 
 | 
只组合,不记忆 | 
| \n | 
 和第n组,第一次匹配的字符相匹配 
 | 
| 字符 | 含义 | 
| 
 ^ 
 | 
匹配字符串的开头 | 
| $ | 
 匹配字符串的结尾 
 | 
| \b | 
 匹配单词的边界符 
 | 
| 
 \B 
 | 
匹配单词非边界符 | 
| 
 (?=p) 
 | 
正向先行断言,都与p匹配但不包含 | 
| 
 (?!p) 
 | 
 负向先行断言,都与p不匹配 
 | 
| 
 字符 
 | 
 含义 
 | 
| 
 i 
 | 
 不区分大小写 
 | 
| 
 m 
 | 
 多行匹配模式 
 | 
| 
 g 
 | 
 全局匹配 
 | 
    3.1String提供了四种支持正则表达式的方法
| 
 方法名称 
 | 
 使用说明 
 | 
| String.search(patern) | 
 返回第一个与之匹配的子串起始位置,如果找不到就返回-1 
 | 
| 
 String.replace(patern, newStr) 
 | 
 将匹配的字符串替换成newStr,newStr也可以是动态替换字符串的函数 
 | 
| 
 String.match(patern) 
 | 
 返回一个有匹配结果组成的数组,如果非全局匹配,第一个是匹配的字符串,后面为分组值 
 | 
| 
 String.split(partern) 
 | 
 根据规则分割成数组 
 | 
| 
 方法名称 
 | 
 使用说明 
 | 
| 
 RegExp.exec(string) 
 | 
 和String的match方法返回值相同,RegExp.lastIndex是全局匹配的下一个匹配项的起始位置 
 | 
| 
 RegExp.test(string) 
 | 
 当exec不为null时,返回true 
 | 
4.正则表达式简单使用实例
匹配中文字符: [\u4e00-\u9fa5]
匹配首尾空格:(^\s*)|(\s*$)
//获取URL参数 var url = "http://www.cnblogs.com?func=window.getUserName&errno=0"; var splitUrlReg = /\?(\w+)=([^&=]*)(?:&(\w+)=([^&=]*))+/;; var paramArr = url.match(splitUrlReg); console.log(paramArr); //["?func=window.getUserName&errno=0", "func", "window.getUserName", "errno", "0", index: 22, input: "http://www.cnblogs.com?func=window.getUserName&errno=0", clone: function]
                    
                
                
            
        
浙公网安备 33010602011771号