首先,正则表达式 这个东西是干吗用的?正则表达式
-好比我要判断用户输入的邮箱是否合法,或者咱们想提取字符串里的某个特定字符,那么咱们就能够用正则表达式来解决这些问题了。数组
正则表达式是一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串就是匹配了,不然该字符串不合法。ruby
匹配规则:jsp
- \d 匹配一个数字,如 '0a\d'可匹配‘0a8’,不能匹配‘0aa’; '\d\d'可匹配'66';spa
- \w 匹配一个字母或者数字,如'0a\w'既可匹配'0a8',还可匹配‘0aa’; '\w\w\w'可匹配'11a','aaa' ;code
- . 匹配任意字符,如'wh.'可匹配'whd','whx','wh!','wh8'等等;对象
- * 匹配任意个字符(包括0个);blog
- + 匹配至少1个字符索引
- ?匹配0或者1个字符ip
- i忽略大小写匹配
- m多行匹配
- \s 匹配一个空格(包括Tab等空白符)
- {n}匹配n个字符,'\d{4}'匹配4个数字,好比'0755'
- {n,m}匹配n-m个字符,'\d{3,8}'可匹配3-8个数字,如'1234','123','12345678' ;
- [] 表示范围匹配,这样能够作到更精准匹配,[0-9a-zA-Z\_]+能够匹配至少由一个数字、字母或者下划线组成的字符串,好比'a9f','a_0','2017';
- A|B 能够匹配A或B,因此'(J|j)s'能够匹配'Js'和'js' ;
- ^表示行的开头,'^\d'表示以数字开头;
- $表示行结束,'\d$'表示以数字结束;js能够匹配'jsp',加上'^js$'后只能匹配'js'了;
- ()表示分组;
JavaScript正则表达式建立的方式有两种:
第一种是经过 /正则表达式/ 形式写出来, 第二种是经过new RegExp('正则表达式')。两种方式是同样的:
var re1 = /whd\88188/; var re2 = new RegExp('whd\\88188'); //注意这种方法须要转义,两个\\实际上是一个\ re1; // /whd|88188/ re2; // /whd|88188/
一、如何判断正则表达式是否匹配:
var re = /^\d{4}\-\d{3-8}$/; re.test('0755-88188'); //true re.test('075-88188'); //false re.test('0755-88188whd'); //false
RegExp对象的test()方法用于检测字符串是否符合条件。
二、如何切割字符串
split()方法用于切割字符串,切割例子以下:
'w h d'.split(''); //['w','','h','','d']
发现没有,没法识别空格,来,加点正则表达式
'w h d'.split(/\s+/); //['w','h','d']
加上,;试试
'w,h;; d'.split(/[\s\,\;]+/); //['w','h','d']
能够用split()方法把不规范地输入转化为规范地输入。
3,如何提取子串
用exec()方法提取子串,如咱们要提取区号和本地号码
var re = /^(\d{4})-(\d{3,8})$/; re.exec('0755-123456'); // ['0755-123456', '0755', '123456'] re.exec('0755 123456'); // null
exec()方法匹配成功后,回返回一个数组,第一个元素是正则表达式匹配到的整个字符串,后面是匹配成功的子串。
四、贪婪匹配
正则表大式默认贪婪匹配,它会匹配尽量多的字符,举个栗子,要匹配出数字后面全部的0
var re = /^(\d+)(0*)$/; re.exec('1023000'); //["1023000","1023000",""]
由于 \d+采用的是贪婪匹配,把'1023000'全部的数字都匹配了,结果0*匹配了空字符串,如今要不匹配全部数字,就得让\d+变成非贪婪匹配,加?能实现
var re = /^(\d+?)(0*)$/; re.exec('1023000'); //["1023000","1023","000"]
五、全局搜索
g表示全局匹配
var re1 = /whd88188/g ;
var re2 = new RegExp('whd88188','g');
这两种表达方式是等价的
全局匹配能够用exec()方法来搜索一个匹配的字符串,指定g标志后,每次运行exec(),正则表达式自己会更新lastIndex属性,表示上次匹配到的最后索引,
var s = 'JavaScript, VBScript, JScript and ECMAScript'; var re=/[a-zA-Z]+Script/g; // 使用全局匹配: re.exec(s); // ['JavaScript'] re.lastIndex; // 10 re.exec(s); // ['VBScript'] re.lastIndex; // 20 re.exec(s); // ['JScript'] re.lastIndex; // 29 re.exec(s); // ['ECMAScript'] re.lastIndex; // 44 re.exec(s); // null,直到结束仍没有匹配到
遇到常常过来回顾回顾……嗯,虽然是这样说……本身都要相信本身了