初探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)
制表符(u0009)
换行符(u000A)
v
垂直制表符(u000B)
f
换页符(u000C)
回车符(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]
[]
退格直接量
    2.3重复
字符
含义
{n,m}
匹配前一项,至少n次,不超过m次,[n,m)
{n,}
匹配前一项,至少n次或者更多次,[n,无穷)
{n}
匹配前一项n次,==n
?
匹配前一项,0到1次,0||1
+
匹配前一项,1到多次,[1,无穷)
*
匹配前一项,0次到多次,[0,无穷)
备注:非贪婪的重复,只需要在重复后面加一个?即可,目标是尽可能少的匹配。
    2.4选择、分组和引用字符
字符
含义
|
选择,匹配左边或者右边的表达式
(...)
分组,可使用重复符进行修饰(记忆)
(?:...)
只组合,不记忆
和第n组,第一次匹配的字符相匹配
2.5指定匹配位置,即锚字符
字符 含义
^
匹配字符串的开头
$
匹配字符串的结尾

匹配单词的边界符
B
匹配单词非边界符
(?=p)
正向先行断言,都与p匹配但不包含
(?!p)
负向先行断言,都与p不匹配
2.6修饰符
字符
含义
i
不区分大小写
m
多行匹配模式
g
全局匹配
3.用于模式匹配的方法,包含String和RegExp对象
    3.1String提供了四种支持正则表达式的方法
方法名称
使用说明
String.search(patern)
返回第一个与之匹配的子串起始位置,如果找不到就返回-1
String.replace(patern, newStr)
将匹配的字符串替换成newStr,newStr也可以是动态替换字符串的函数
String.match(patern)
返回一个有匹配结果组成的数组,如果非全局匹配,第一个是匹配的字符串,后面为分组值
String.split(partern)
根据规则分割成数组
    3.2RegExp提供两个方法
方法名称
使用说明
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]

  

  

 
原文地址:https://www.cnblogs.com/xiaoheimiaoer/p/3677282.html