何为正则
正则使用的范围相当广泛,在各种各样的编程语言或者脚本语言都能看到他们的身影;那么,何为正则. 就我个人理解..就是个过滤器,用特定的符号去匹配特定的内容,变动特定的符号的组合来达到匹配各种各样自己需要得到的内容 我们这里不谈所谓的正则解析引擎,也不过多的深入,只是平时粗浅使用的经验总结
特定符号[元字符]
千篇一律,介绍下元字符
元字符 | 作用简单描述 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母、数字、下划线或行字 |
\W | 匹配任意非字母、数字、下划线或汉字的字符 |
\s | 匹配任意的空白符 |
\S | 匹配任意非空白符的字符 |
\d | 匹配数字 |
\D | 匹配任意非数字的字符 |
\b | 匹配单词的开始或结束 |
\B | 匹配不是单词开口或结束的位置 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
\G | 上一个匹配的结尾(本次匹配开始) |
\A | 字符串开头(类似^,但不受处理多行选项的影响) |
\Z | 字符串结尾或行尾(不受多行选项的影响) |
\z | 字符串结尾(类似$,但不受处理多行选项的影响) |
* | 重复匹配零次或更多次 |
+ | 重复匹配一次或多次 |
? | 重复匹配零次或一次 |
{n} | 重复匹配n次 |
{n,} | 重复匹配n次或更多次 |
{n,m} | 重复匹配n到m次 |
\n | 匹配一个换行符。等价于\x0a和\cJ。 |
\r | 匹配一个回车符。等价于\x0d和\cM。 |
字符转义
需要转义的字符有:$,(,),*,+,.,[,],?,^,{,},|。
零宽断言
零宽断言表示匹配字符的时候再添加一些定位条件,使匹配更精准。
正则表达式 | 说明 |
---|---|
\w+(?=ing) | 匹配以ing结尾的多个字符(不包括ing) |
\w+(?!ing) | 匹配不是以ing结尾的多个字符 |
(?<=re)\w+ | 匹配不是以re开头的多个字符(不包括re) |
(? | 匹配不是以re开头的多个字符 |
(?<=\s)\d+(?=\s) | 匹配两边是空白符的数字,不包括空白符 |
贪婪与懒惰
贪婪: 匹配尽可能长的字符串;
懒惰:匹配尽可能短的字符串;
懒惰模式的启用只需在重复元字符之后加上?即可。
JS正则
在ES5中,JS的正则声明的写法类似数组或者对象,也是通过new来实现
var re = new RegExp()
;
这货接受两个参数,匹配的内容及处理方式
var re = new RegExp("age","igm")
或
var re = new RegExp(/age/igm)
此时不能接受第二个参数,因为已经包含
或者
var re = /age/igm;
此时不能接受第二个参数,因为已经包含
其中的igm分别代表,忽略大小写,全局匹配,多行匹配[可选项,一个多个模式都行]
声明之后,应有调用:
- test – RegExp的test方法用来测试字符串是否匹配给出的匹配模式,返回布尔值;
- exec – RegExp的exec方法返回包含第一个匹配的的数组或null;
- match – String的match方法返回包含所有匹配子字符串的数组;
- replace – String的replace方法完成string的替换操作,支持正则表达式;
- search – 与String的indexof方法类似,不同的是search支持正则表达式,而不仅仅是字符串;
- split – 按照一定规则拆分字符串并将子字符串存储到数组中的String方法。
方法测试–chrome下的console
var re = new RegExp("m","mgi"); //声明
re.test("abcdefg"); //return false
re.exec("kvsdlkfjzj;vjm"); //["m"]
str = "fasklweoiaurjafm.;kzscmz.,mca cmvnka;djfaw;eruweiorj"
str.match(re); //["m","m","m"]
str.search(re); //15
str.replace(re,"AAA") //"fasklweoiaurjafAAA.;kzscAAAz.,AAAca cAAAvnka;djfaw;eruweiorj"
re2 = /;/g;
str.split(re2) //["fasklweoiaurjafm.","kzscmz.,mca cmvnka","djfaw","eruweiorj"]