正则小知识汇总
正则表达式是区分大小写的
一、定义
1. 构造函数
var reg=new RegExp('ab','g');
2. 字面量
var reg=/ab/g;
-
g: global,全文搜索,默认搜索到第一个结果接停止
-
i: ingore case,忽略大小写,默认大小写敏感
-
m: multiple lines,多行搜索
二、预定义特殊字符
字符
|
含义
|
\t
|
水平制表符
|
\r
|
回车符
|
\n
|
换行符
|
\f
|
换页符
|
\cX
|
与X对应的控制字符(Ctrl+X)
|
\v
|
垂直制表符
|
\0
|
空字符
|
三、预定义类
字符
|
等价类
|
含义
|
.
|
[^\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]
|
非单词字符
|
四、边界
字符
|
含义
|
^
|
以xx开头
|
$
|
以xx结尾
|
\b
|
单词边界,指[a-zA-Z_0-9]之外的字符
|
\B
|
非单词边界
|
五、前瞻
表达式
|
含义
|
exp1(?=exp2)
|
匹配后面是exp2的exp1
|
exp1(?!exp2)
|
匹配后面不是exp2的exp1
|
1、字符组
[ ]
字符串用中括号括起来,表示匹配其中的任一字符,相当于或的意思
注意:在[ ]里面是没有元字符的,都代表本身的含义,例如[.]就表示匹配一个点.的意思
例如:
gr[ea]y //匹配grey或gray
[^... ]
表示匹配所有方括号里未列出的字符
在特别强调,排除型字符组表示“匹配一个未列出的字符”而不是“不要匹配列出的字符”。区别在于前者必须要匹配一个。
例如:
r[^abc]r //匹配出rar,rbr,rcr之外的任意r*r文本
.
匹配任意字符的字符组简便写法
例如
.a //匹配 Aa 1a ga 等等
|
或 多选分支 选择两者中的一个 注意 | 将左右两边分为两部分,而不管左右两边有多长多乱
例如
gray|grey //既可匹配gray又可匹配grey 相当于gr[ae]y
\
转义符它的作用是使元字符失去它的意义,仅仅代表其日常输入中字符的意义。
例如,我要匹配字符 . 字符* 就需要在前面加反斜杠,\. \*去除它元字符的含义。
一些需要转义的字符列表。 \ * + ? | { [ ( ) ^ $ . # 和 空白
2、方法
test()
方法用于测试字符串参数中是否存正则表达式模式,如果存在则返回true,否则返回false
检索字符串中指定的值。返回 true 或 false。
var reg=/\d+\.\d{1,2}$/g;
reg.test('123.45'); //true
reg.test('0.2'); //true
reg.test('a.34'); //false
reg.test('34.5678'); //false
exec()
检索字符串中指定的值。返回找到的值,并确定其位置。
返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
重要事项:如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0。
var reg=/\d/g;
var r=reg.exec('a1b2c3');
console.log(r) // ["1", index: 1, input: "a1b2c3"]
console.log(reg.lastIndex); //2
r=reg.exec('a1b2c3');
console.log(r) // ["2", index: 3, input: "a1b2c3"]
console.log(reg.lastIndex); //4
r=reg.exec('a1b2c3');
console.log(r) // ["3", index: 5, input: "a1b2c3"]
console.log(reg.lastIndex); //6
index 属性声明的是匹配文本的第一个字符的位置。
input 属性则存放的是被检索的字符串 string。
lastIndex:正则表达式开始下一次查找的索引位置,第一次的时候总是为0的,第一次查找完了的时候会把lastIndex的值设为匹配到得字符串的最后一个字符的索引位置加1,第二次查找的时候会从lastIndex这个位置开始,后面的以此类推。如果没有找到,则会把lastIndex重置为0。要注意的是,lastIndex属性只有在有全局标志正则表达式中才有作用。如果我们把下面代码中正则表达式的g标志去掉,那么三次弹出的就都是true了。
var regexp = /abcd/g;
var str = 'abcdefg';
alert(regexp.test(str)); //true
alert(regexp.test(str)); //false
alert(regexp.test(str)); //true
注意:字符串的正则方法里lastIndex属性是不起作用的,不管正则模式是不是全局的。lastIndex属性只在正则表达式对象的全局标志下起作用。