常用的正则字符
1.\ : 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,‘n’ 匹配字符 “n”。‘n’ 匹配一个换行符。序列 ‘’ 匹配 “” 而 “(” 则匹配 “(”。
2.^:匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘n’ 或 ‘r’ 之后的位置。
3. : 匹 配 输 入 字 符 串 的 结 束 位 置 。 如 果 设 置 了 R e g E x p 对 象 的 M u l t i l i n e 属 性 , :匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性, :匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性, 也匹配 ‘n’ 或 ‘r’ 之前的位置。
4.*:匹配前面的子表达式零次或多次。例如,zo 能匹配 “z” 以及 “zoo”。 等价于{0,}。
5.+:匹配前面的子表达式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
6.?:匹配前面的子表达式零次或一次。例如,“do(es)?” 可以匹配 “do” 或 “does” 中的"do" 。? 等价于 {0,1}。
7.{n}:n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
8.{n,}:n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。
9.{n,m}:m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。
10.?:当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 “oooo”,‘o+?’ 将匹配单个 “o”,而 ‘o+’ 将匹配所有 ‘o’。
11.·:匹配除 “n” 之外的任何单个字符。要匹配包括 ‘n’ 在内的任何字符,请使用象 ‘[.n]’ 的模式。
16.x|y:匹配 x 或 y。例如,‘z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。
17.[xyz]:字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。
18.[^xyz]:负值字符集合。匹配未包含的任意字符。例如, ‘1’ 可以匹配 “plain” 中的’p’。
19.[a-z]:字符范围。匹配指定范围内的任意字符。例如,’[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。
20.[^a-z]:负值字符范围。匹配任何不在指定范围内的任意字符。例如,‘2’ 可以匹配任何不在 ‘a’ 到 ‘z’ 范围内的任意字符。
21.\b:匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘erb’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
22.\B:匹配非单词边界。‘erB’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
24.\d:匹配一个数字字符。等价于 [0-9]。
25.\D:匹配一个非数字字符。等价于 3。
26.\f:匹配一个换页符。等价于 x0c 和 cL。
27.\n:匹配一个换行符。等价于 x0a 和 cJ。
28.\r:匹配一个回车符。等价于 x0d 和 cM。
29.\s:匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。
30.\S:匹配任何非空白字符。等价于 4。
33.\w:匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。
34.\W:匹配任何非单词字符。等价于 ‘5’。
RegExp类型
ECMAScript通过RegExp类型支持正则表达式,如下:
var expression = /pattern/flags;
其中的模式(pattern)部分可以是任何简单或者复杂的正则表达式,可以包含字符类、限定符、分组、向前查找以及反向引用。每个正则表达式可带有一个或者多个标注(flags),用以标明正则表达式的行为。有三个一下标志:
g:表示全局模式,即模式将被应用到所有字符串,而非在发现第一个匹配项时立即停止。
i:表示不区分大小写模式。
m:表示多行模式,即在到达一行文本末尾时还在继续查找下一行中是否存在于模式匹配的项。
正则表达式定义方式
以字面量的形式来定义正则表达式
例如:匹配第一个bat或者cat,不区分大小写
var pattern = /[bc]at/i;
test()方法
正则表达式常用方法test(),它接受一个字符串参数。在模式与该参数匹配的情况下返回true,否则返回false。
用法:正则.test(字符串)
例1:判断是否是数字
var str = '374829348791';
var re = /\D/; // \D代表非数字
if( re.test(str) ){ // 返回true,代表在字符串中找到了非数字。
alert('不全是数字');
}else{
alert('全是数字');
}
例2:
var text ="000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;
if(pattern.test(text)){
console.log('the pattern was matched.');
}
search()方法
在字符串搜索符合正则的内容,搜索到就返回出现的位置(从0开始,如果匹配的不只是一个字母,那只会返回第一个字母的位置), 如果搜索失败就返回 -1
用法:字符串.search(正则)
例子:在字符串中找字母b,且不区分大小写
var str = 'abcdef';
var re = /B/i;
//var re = new RegExp('B','i'); 也可以这样写
alert( str.search(re) ); // 1
match方法
获取正则匹配到的结果,以数组的形式返回
用法: 字符串.match(正则)
例如:
"186a619b28".match(/\d+/g); // ["186","619","28"]
如果上面的匹配不是全局匹配,那么得到的结果如下:
[“186”, index: 0, input: “186a619b28”]
replace方法
replace 本身是JavaScript字符串对象的一个方法,它允许接收两个参数:
replace([RegExp|String],[String|Function])
第1个参数可以是一个普通的字符串或是一个正则表达式.
第2个参数可以是一个普通的字符串或是一个回调函数.
如果第2个参数是回调函数,每匹配到一个结果就回调一次,每次回调都会传递以下参数:
1、result: 本次匹配到的结果。
2、1,…9: 正则表达式中有几个(),就会传递几个参数,1 9分别代表本次匹配中每个()提取3、的结果,最多9个。
4、offset:记录本次匹配的开始位置。
5、source:接受匹配的原始字符串。
以下是replace和JS正则搭配使用的几个常见经典案例:
(1)实现字符串的trim函数,去除字符串两边的空格
String.prototype.trim = function(){
//方式一:将匹配到的每一个结果都用""替换
return this.replace(/(^\s+)|(\s+$)/g,function(){
return "";
});
//方式二:和方式一的原理相同
return this.replace(/(^\s+)|(\s+$)/g,'');
};