正则写法

var re = /a/;//简写
/.../里不能为空,因为会误以为是注释;
var re = new RegExp('a');

新建一个RegExp对象;和新建Array对象,Object对象一样,有简写;

平时建议用简写,因为简写的性能更好;

但如果正则表达式里有非类字符串的类型(其实并不是字符串,只能不知怎么表述),则不能简写,因为/.../里写的只能类字符串类型;

var arr = [];
var arr = new Array();
var obj = {};
var obj = new Object();

正则常用方法

test()

test(): 正则去匹配字符串,如果匹配成功就返回真,如果匹配失败就返回假

语法:正则.test(字符串)

var str = 'abcdef';
var re = /b/;
alert( re.test(str) ); //true
search()

search(): 正则去匹配字符串 , 如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回 -1,和indexof()差不多

语法:字符串.search(正则)

正则默认是区分大小写的;

如果不区分大小写的话,需要在正则的最后加标识i

var str = 'abcdef';
var re = /B/i;
//var re = new RegExp('B','i');
alert( str.search(re) );
match()

match(): 正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null

语法:`字符串.match(正则)

正则默认匹配成功就会结束,不会继续匹配

如果想全部查找,就要加标识 g(全局匹配)`

replace()

replace(): 正则去匹配字符串,匹配成功的字符去替换成新的字符串

语法:字符串.replace(正则,新的字符串)

第二个参数:可以是字符串,也可以是一个回调函数

var str = 'aaa';
var re = /a+/g;
str = str.replace(re,function(str){
return str;
//回调函数的第一个参数:就是匹配成功的字符
});
alert(str);
匹配子项

小括号 () (还有分组操作的意思)

把正则的整体叫做(母亲)

第一个小括号里面的正则,叫做这个第一个子项(母亲的第一个孩子),第二个小括号就是第二个子项

var str = '2013-6-7';
var re = /(\d+)(-)/g;
str = str.replace(re,function($0,$1,$2){
//第一个参数:$0(母亲),第二个参数 : $1(第一个孩子),第三个参数 : $2(第二个孩子)
return $1 + '.';
});
alert( str ); //2013.6.7

match()中也有匹配子项

var str = 'abc';
var re1 = /abc/;
var re2 = /(a)(b)(c)/;
alert( str.match(re1) ); //abc
alert( str.match(re2) ); //[abc,a,b,c]
//当match不加g的时候才可以获取到子项的集合
字符类

一组相似的元素,用 [] 中括号的整体代表一个字符,如果想代表多个,则在[]后面加上一个+

var str1 = 'abc';
var str2 = 'abdc';
var re1 = /a[bde]c/;//bde是或的关系
var re2 = /a[bde]+c/;// alert( re1.test(str1) ); //true
alert( re1.test(str2) ); //false
alert( re2.test(str2) ); //true

排除 ^ : 如果^写在[]里面的话,就代表排除的意思

[]里面还可以写一个范围,但是要从小到大;

var re = /a[a-z0-9A-Z]c/;
常见元字符

. : 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像"(.|\n)"的模式。

^ : 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置

$ : 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置

\s : 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]

\S : 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]

\d : 匹配一个数字字符。等价于 [0-9]

\D : 匹配一个非数字字符。等价于 [^0-9]

\w : 匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_]( 字母 ,数字,下划线_ )

\W : 匹配任何非单词字符。等价于 [^A-Za-z0-9_]

\b: 匹配一个单词边界(起始,结束,空格),也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'

\B: 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'

\r: 匹配一个回车符。等价于 \x0d \cM

\t: 匹配一个制表符。等价于 \x09\cI

\num : 匹配 num,其中 num 是一个正整数。对第num个子项的引用。例如,'(.)\1' 匹配两个连续的相同字符。

量词类:

* : 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}

+ : 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}

? : 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}

{n} : n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o

{n,} : n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'

{n,m} : m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格

? : 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

更多内容看 正则表达式-元字符表

常用表单校验

匹配中文:[\u4e00-\u9fa5]

行首行尾空格:^\s*|\s*$

Email:^\w+@[a-z0-9]+(\.[a-z]+){1,3}$

网址:[a-zA-z]+://[^\s]*

QQ号:[1-9][0-9]{4,9}

邮政编码:[1-9]\d{5}

身份证:[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x

可以把这些正则放到一个空间里,调用起来方便;

var re = {
qq : /[1-9][0-9]{4,9}/,
email : /[1-9]\d{5}/,
...
}
需要时就调相应的正则:
re.qq.test(str);

最新文章

  1. NOIP2000单词接龙[DFS]
  2. CSS3实现背景颜色渐变
  3. 超链接访问过后hover样式就不出现的问题
  4. Java中的文件操作
  5. C#Console程序使用Ninject
  6. 转 玩转Bash变量
  7. springmvc 方法参数自定义的解析
  8. 用PHP删除ftp下载导致的文件空行
  9. GenericServlet
  10. 真正可用的安卓webview html图片上传限制突破处理(拍照+相册都可以用)
  11. html中radio单选和文本框限制只能输入数字的解决方案
  12. supervusor常遇到的问题
  13. eureka 学习
  14. stund客户端使用结果说明
  15. window的三大功能,行内样式获取的讲解 getcomputerStyle
  16. 使用vue开发微信公众号下SPA站点的填坑之旅
  17. samba配置(z)
  18. git 创建管理多用户
  19. 关于react虚拟DOM的研究
  20. POJ 1218 THE DRUNK JAILER(类开灯问题,完全平方数)

热门文章

  1. JAVA输入随笔
  2. IOS开发之——objectForKey与valueForKey在NSDictionary中的差异
  3. 关闭tensorflow运行时的警告信息
  4. helloweblogic 官方qq群欢迎加入!
  5. Devexpress中统一设置字体样式的方法
  6. python namedtuple命名元组
  7. Shell输出颜色设置
  8. javascript的跨域调用
  9. IE浏览器报Promise未定义
  10. WPF Window对象的生命周期