1 2 3 4 5 6 |
|
元字符
元字符是表达式语法的一部分,在正则表达式中用到的所有元字符有:{ [ ( \ ^ $ | ) ] } ? * + -
如匹配一个问号:var reQMark = /\?/; 或 var reQMark = new RegExp("\\?"); //注意这里是两个反斜杠,双重转义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
方括号
1 2 3 4 5 6 7 8 |
|
量词
? 匹配任何包含零个或一个的字符串,如:ba?d匹配bd、bad
+ 匹配任何包含至少一个的字符串,如:ba+d匹配bad、baad
* 匹配任何包含零个或多个的字符串,如:ba*d匹配bd、bad、baad
{n} 匹配包含恰好出现n次的序列的字符串,如:ba{1}d匹配bad
{n,m} 匹配包含至少n次但不超过m次 的序列的字符串,如:ba{0,1}d匹配bd、bad
{n,} 匹配包含至少出现n次的序列的字符串,如:ba{0,}匹配bd、bad、baad、baaad
贪婪量词:先看整个的字符串是否匹配,如果发现没有匹配,去年该字符串中的最后一个字符并再次尝试,如:?、+、*、{n}、{n, m}、{n, },默认就为贪婪量词
惰性量词:先看字符串中的第一个字母是否匹配,如果单独这一个字符还不够,就读入下一个字符,组成两个字符的字符串,与贪婪量词的工作方式恰好相反,如:??、+?、*?、{n}?、{n, m}?、{n, }?
支配量词:只尝试匹配整个字符串,如果整个字符串不能产生匹配,不做进一步尝试,如:?+、++、*+、{n}+、{n, m}+、{n, }+
1 2 3 4 |
|
复杂模式之分组:通过一系列括号包围一系列字符、字符类以及量词来使用的
/(dog){2}/ 匹配"dogdog"
/([bd]ad?)*/ 匹配空, "ba", "da", "bad", "dad"
/(mom( and dad)?)/ 匹配"mom", "mom and dad"
/^\s*(.*?)\s+$/ 匹配首尾的空白字符,也可以用/^\s+|\s+$/g
复杂模式之反向引用:也叫捕获性分组,按照从左到右遇到的左括号字符的顺序进行创建和编号的,例如表达式(A?(B?(C?)))将产生编号从1-3的三个反向引用:(A?(B?(C?)))、(B?(C?))、(C?)
反向引用有几种不同的使用方法:
首先,使用正则表达式对象的test()、match()或search()方法后,反向引用的值可以从RegExp构造函数中获得,如:
1 2 3 4 |
|
然后,可以直接在定义分组的表达式中包含反向引用,通过使用特殊转义序列如\1、\2等实现
1 2 3 |
|
第三,反向引用可以用在String对象的replace()方法中,通过使用特殊字符序列如$1、$2等实现
1 2 3 |
|
复杂模式之候选:使用管道符(|)放在两个单独的模式之间
1 2 3 4 5 |
|
复杂模式之非捕获性分组:相比捕获性分组,不会创建反向引用,在较长的正则表达式中,存储反向引用会降低匹配速度,通过使用非捕获性分组,仍然可以拥有与匹配字符串序列同样的能力,而无需存储结果的开销
1 2 3 4 5 |
|
又如:
1 2 3 4 |
|
复杂模式之前瞻:告诉正则表达式运算器向前看一些字符而不移动其位置,存在正向前瞻(检查接下来出现的是不是某个特定字符集)和负向前瞻(检查接下来的不应该出现的特定字符集)
正向前瞻(?=n) 匹配任何其后紧接指定字符串 n 的但不包括 n的字符串,注意这里的括号不是分组
负向前瞻(?!n) 匹配任何其后没有紧接指定字符串 n 的字符串,如:
1 2 3 4 5 6 7 8 9 10 |
|
复杂模式之边界:用于正则表达式中表示模式的位置
n$ 匹配任何结尾为 n 的字符串,如:/(\w+)\.$/匹配行尾单词"one.","two."等
^n 匹配任何开头为 n 的字符串,如:/^(.+?)\b/匹配起始位置后的一个或多个单词字符
\b 查找位于单词的开头或结尾的匹配,如:/\b(\S+?)\b/g 或 /(\w+)/g匹配从字符串中抽取单词
\B 查找不处在单词的开头或结尾的匹配
复杂模式之多行模式:
1 2 3 |
|
RegExp对象的属性和方法:
global //RegExp 对象是否具有标志 g
ignoreCase //RegExp 对象是否具有标志 i
multiline //RegExp 对象是否具有标志 m
source //正则表达式的源文本
lastIndex //一个整数,标示下一次匹配钭会从哪个字符位置开始(只有当使用exec()和test()函数才会填入,否则为0)
真正使用到的是lastIndex,如:
1 2 3 4 5 6 7 8 9 10 11 |
|
静态属性
input,短名为$_,最后用于匹配的字符串(传递给exec()或test()的字符串)
leftContext,短名为$^,在上次匹配的前面的子串
rightContext,短名为$^,在上次匹配之后的子串
lastMatch,短名为$&,最后匹配的字符
lastParen,短名为$+,最后匹配的分组
multiline,短名为$*,用于指定是否所有的表达式都使用多行模式的布尔值,不同于其它属性,不依赖最后一次执行的匹配,它可以设置所有的正则表达式的m选项,RegExp.multiline = "true";,注意IE和Opera不运行它
1 2 3 4 5 6 7 8 9 10 11 12 |
|
支持正则表达式的String对象的方法
1 2 3 4 5 6 7 8 9 |
|
常用模式
日期:/(?:0[1-9]|[12][0-9]|3[01])\/(?:0[1-9]|1[0-2])\/(?:19|20\d{2})/
URL:/^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$/
E-mail地址:/^(?:\w+\.?)*\w+@(?:\w+\.?)*\w+$/
国内电话号码:d{3}-d{8}|d{4}-d{7}
腾讯QQ号:[1-9][0-9]{4,}
邮政编码:[1-9]d{5}(?!d)
身份证:d{15}|d{18}
ip地址:d+.d+.d+.d+
中文字符: [u4e00-u9fa5]
双字节字符(包括汉字在内):[^x00-xff]
String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}
全角字符:/[^uFF00-uFFFF]/g
匹配特定数字:
1 2 3 4 5 6 7 8 9 10 |
|
是不是很全面,很详细,感觉不错的就把这文章好好收藏,js正则表达式很重要的学习环节,大家一定好好学习。