正则表达式基础
javascript 的正则表达式是通过ECMAScript中的RegExp类实现的,可以接受两个参数,第一个个进行匹配的模式字符串,第二个额外的处理指令。
如:
var color=new RegExp("color","gi"); //g 是全局 i是不区分大小写
正则表达式有三个方法:
test: 返回true 或false
/color/.test("color"); //true
exec: 返回一个数组 数组中的第一个条目是第一个匹配,其他的是反向引用
/color/.exec("color , iam color"); //["color"]
match:返回一个包含在字符串中的所有匹配的数组
"color i an colore".match(/color/gi);//["color","color"];
search: 与indexOf类似
"youcolor i an colore".search(/color/gi) //3
元字符:
{ [ ( ) \ ^ $ | ? * + .
如果需要使用需要转义 如: \?
字符串中的字母可以用十六进制或者八进制:十六进制加 \x 八进制加 \
如: b 的十六机制是ASCII是62 可以表示为 \x62 /\x62/.test("blur") //true
b的八进制是142 可以表示为 /\142/.test("blur") //true
如果用 unicode表示为:
b的Unicode为 \u0062 /\u0062/.test("blur") //true
预定义的特殊字符
\t | 制表符 |
\n | 换行符 |
\r | 回车符 |
\f | 换页符 |
\a | alert字符 |
\e | escape字符 |
\cX | 与X相对应的字符 |
\b | 回退字符 |
\v | 垂直制表符 |
\0 | 空字符 |
字符 | 描述 |
替换所有的换行符 " dfdsafdsaf \n fdsaf\n ".replace(/\n/gi,"")
字符类
1:简单类:
/[abc]olor/gi
2:负向类
/[^abc]olor/gi
3:范围类
[a-z]
4:组合类(内部之间不可有空格)
[a-zA-Z_]
5:预定义类
代码 | 等同于 | 匹配 |
. | [^\n\r] | 除了换行和回车外的任何字符 |
\d | [0-9] | 数字 |
\D | [^0-9] | 非数字字符 |
\s | [ \t\n\x0B\f\r] | 空白字符 |
\S | [ ^\t\n\x0B\f\r] | 非空白字符 |
\w | [a-zA-Z_0-9] | 单词字符 |
\W | [^a-zA-Z_0-9] | 非单词字符 |
量词
1:简单量词
代码 | 描述 |
? | 出现0次或一次 |
* | 零次或多次(任意数) |
+ | 一次或多次(至少出现一次) |
{n} | 一定出现n次 |
{n,} | 至少出现n次 |
{n,m} | 至少出现n次但不超过m次 |
2:贪婪,惰性,支配(单个是贪婪 加上?号是惰性 加上+是支配)
贪婪 | 惰性 | 支配 | 描述 |
? | ?? | ?+ | 零次或一次出现 |
* | *? | *+ | 零次或多次出现 |
+ | +? | ++ | 一次或多次出现 |
{n} | {n}? | {n}+ | 恰好n次出现 |
{n,} | {n,}? | {n,}+ | 至少n次出现 |
{n,m} | {n,m}? | {n,m}+ | 至少n次最多m次 |
复杂模式
1:分组
/(dog)[2]/g
2:反向引用
/#(\d+)/.test("#1234567") ;//true RegExp.$1 1234567
/(dog)\1/g -> /dogdog/g
"1234 5678".replace(/(\d{4}) (\d{4})/g,"$2 $1") // 5678 1234
候选
/red|black/gi
非捕获性数组(左括号的后门加上一个?:)
/#(?:/d+)/g
前瞻(正向表示接下来是什么?=,负向表示接下来不是什么?!,写在(?=和)之间)
/(bed(?=room))/g , /(bed(?!room))/g这不是分组,分组不会考虑前瞻的
边界
边界 | 描述 |
^ | 行开头 |
$ | 行结尾 |
\b | 单词边界 |
\B | 非单词边界 |
如:/(\w+)\.$/g 行结尾前跟着.的单词
多行模式(m)
/red/gm
实例属性
global--bool g 全局
ignoreCase --bool i 大小写
laseIndex --整数 代表下次从哪个地方开始(exec和test才用到)
multiline -- bool m 多行
source:正则表达式的源字符串形式{ /[ba]*/i.global --false /[ba]*/i.ignoreCase --true }