正则表达式在前端的开发中,使用面范围比较多,比如检查用户名字是否合法,基本上字符串的操作首选是用正则表达式,一些js库中,对正则表达式也是用尽了各种各样的方法,比如Jquery和baidu的tangram库,里面有很多的正则表达式的妙用,其实万变不离其宗,我们主要掌握正则表达式的一些核心的东西,去分析这些正则的用法,便会揭穿正则的真面目。
1)核心:正则中的元字符:( , ) . , ? ,[ , ] ,*,+, ^, $,{, },\ , | 。什么是元字符呢 ?通俗的讲就是这些字符你是不能直接用的,在正则中有特殊的意义。如果你要使用它们,那么你就必须要用转义字符 "\" , 关于转义字符,有两种方式,在/reg/的这种方式下,只需要一个"\"的,但是在RegExp的这种形式下,必须有2个"\\"的形式,我们有时候在代码中看到\x24 的这种形式,这是什么呢?其实就这个就是$字符的unicode的形式,对应其他的一些字符的unicode的形式分别为:\x51==^ , \x28=( , \x29==),\x2a==* ,\x2b==+ , \x2e==. , \x3f==?,x\5b ==[ , x\5d == ] , \x7b = { , \x7d == },\x5c == \ , \x7c == | , .
2 ) 正则表达式的优先级:从上到下依次降低。
操作符 | 描述 |
---|---|
\ | 转义符 |
(), (?:), (?=), [] | 圆括号和方括号 |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, \anymetacharacter | 位置和顺序 |
| | “或”操作 |
3)贪婪模式和非贪婪模式 :贪婪模式尽量匹配更多的字符,默认的就是贪婪模式,而非贪婪模式是尽量匹配更少的字符
4)正则表达式符号的解释(整理)
字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {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*'。
5)应用:
5.1 两种形式的定义(使用一个字面的形式和使用正则表达式构造函数的形式,如:RegExp):
例如: var re = /ab+c/; 等价于 var re = new RegExp("ab+c");
这两种当时等价。
5.2 正则表达式的使用: 2个正则表达式特有的方法reg.exec() reg.test(),4个字符串的方法 match,replace,search,split.下面对这几个方法描述下
方法 | 描述 |
---|---|
exec | 在字符串中执行一个搜索的匹配,返回一个数组格式 |
test | 在字符串中执行一个测试的匹配,返回布尔值(true和false) |
match | 字符串的方法,执行一个搜索的匹配,返回一个数组或null |
search | 字符串的方法, 执行一个测试的陪陪,返回匹配的索引值,如果失败,返回-1 |
replace | 字符串的方法,执行一个搜索的匹配,使用字符串取代匹配到的字符串. |
split | 字符串的方法,使用一个正则表达式或者字符串分割字符串,返回数组 |
举例说明:
1.exec
结果:dbbbbbbd,bbbbbb。结果本应该是:dbbbbbbd,bbbbbb, dbbd,bb 可见,该方法是执行一次,即使是后面添加g
2 test
结果返回 true。
3 match
结果返回: "dbbbbbbd", "dbbd"
4 replace
结果返回: "s##f"
6)如何分析正则表达式呢?碰到正则的时候不要在网上查找,现在网上有很多的人都总结了,匹配各种问题的正则表达式。有的同学也收藏了这些,碰到问题的时候,就直接去抄过来。
其实这样不好,并没有提高正则表达式的能力。因此,我们在碰到表达式的问题的时候,要冷静下来自己分析,一个一个的来。久而久之,这样,就会提高自己的正则表达式处理问题的能力 。