1.正则中的特殊字符
\ 作为转意,即一般在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。
-或-
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或屡次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。
^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字符0次或屡次,/ba*/将匹配b,ba,baa,baaa
+ 匹配前面元字符1次或屡次,/ba*/将匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
(x) 匹配x保存x在名为$1...$9的变量中
x|y 匹配x或y
{n} 精确匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz] 不匹配这个集合中的任何一个字符
[\b] 匹配一个退格符
\b 匹配一个单词的边界
\B 匹配一个单词的非边界
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M
\d 匹配一个字数字符,/\d/ = /[0-9]/
\D 匹配一个非字数字符,/\D/ = /[^0-9]/
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/
\t 匹配一个制表符
\v 匹配一个重直制表符
\w 匹配一个能够组成单词的字符(alphanumeric,这是个人意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
\W 匹配一个不能够组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。
\ f 换页符
\ n 换行符
\ r 回车
\ t 制表符
i 执行大小写不敏感的匹配
g 执行一个全局的匹配,简而言之,就是找到全部的匹配,而不是在找到第一个以后就中止了
*:除属性 g 和 i 以外,正则表达式就没有其它像属性同样的特性了.若是将构造函数 RegExp 的静态属性 multiline 设置为 true ,那么模式匹配将以多行的模式进行. 在这种模式下,锚字符 ^ 和 $ 匹配的不仅是检索字符串的开头和结尾,还匹配检索字符串内部的一行的开头和结尾.例如: 模式 /Java$/ 匹配的是 "Java",可是并不 匹配正则表达式
"Java\nis fun" .若是咱们设置了 multiline 属性,那么后者也将被匹配:express
RegExp.multiline = true;数组
[a-z] //匹配全部的小写字母 [A-Z] //匹配全部的大写字母 [a-zA-Z] //匹配全部的字母 [0-9] //匹配全部的数字
[0-9\.\-] //匹配全部的数字,句号和减号 [ \f\r\t\n] //匹配全部的白字符
^表示字符串的开头,但它还有另一个含义。当在一组方括号里使用^是,它表示"非"或"排除"的意思,经常用来剔除某个字符。
2.定义正则表达式的方法
var reg=//
var reg=new RegExp()
3.正则表达式对象的方法
compile 正则表达式比较
exec 执行查找
test 进行匹配
toSource 返回特定对象的定义(literal representing),其值可用来建立一个新的对象。重载Object.toSource方法获得的。
toString 返回特定对象的串。重载Object.toString方法获得的。
valueOf 返回特定对象的原始值。重载Object.valueOf方法获得
4.exec方法:
若是 exec 方法没有找到匹配,将返回 null。若是找到匹配项,则 exec 方法返回一个数组,并将更新全局 RegExp 对象的属性以反映匹配结果。数组元素 0 包含了完整的匹配项,而元素 1 到 n 包含的是匹配项中出现的任意一个子匹配项。这至关于没有设置全局标志 (g) 的 match 方法的行为。ide
若是为正则表达式设置了全局标志,则 exec 从 lastIndex 值指示的位置开始搜索字符串。若是没有设置全局标志,则 exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。函数
exec 方法返回的数组有三个属性:input、index 和 lastIndex。input 属性包含整个被搜索的字符串。 index 属性包含了在整个被搜索字符串中匹配的子字符串的位置。 lastIndex 属性中包含了匹配中最后一个字符的下一个位置。ui
eg:spa
var objStr="个人手机号13522222222,他的手机号13288888888,她的手机号码13699999999";3d
var reg=/13(\d)(\d{8})/g;code
var arr=reg.exec(objStr);对象
console.log(arr);
=======>结果:
5.利用正则封装模板替换代码
/* 抽取为一个方法 为了 替换 模板中的 {name}这类文字 参数1:使用模板 既挖好坑的 字符串 {name} 这样的 参数2:对象 */ function my_template(templateString, obj) { // 定义正则 var reg = /{(\w+)}/; // 查找并替换 须要经过循环的方式 去肯定次数 var result; // 这里只写了一个=号 会先将括号中的 代码执行掉 判断正则验证完毕以后的结果 若是为null 跳出 while (result = reg.exec(templateString)) { // 进行替换 0:{name} 1:name // 从结果中获取 替换的文本 以及 属性的名字 var replaceString = result[0]; var key = result[1]; // 替换咱们传入的 这个 模板字符串 templateString = templateString.replace(replaceString, obj[key]); } // 若是可以执行到这里 说明 替换完毕了 // console.log(templateString); // 放心大胆的 return return templateString; }