正则表达式
正则表达式字符
正则转义字符
.
:任意字符
\s
:匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格。
\S
:非空格
\d
:数字
\D
:非数字
\w
:字符
\W
:非字符
\b
:匹配一个单词边界,也就是指单词和空格间的位置。
\B
:非独立部分
正则表达式 - 元字符
var str=" one two";
var re=/\bone/;
re.test(str);
//true
\1
:重复的第一个子项
/\w\w/ //c9
/(\w)\1/ //cc 99
符号
当正则需要传参,必须使用完整写法;
var re=new RegExp('\\b'+str);
^
:正则的最开始位置,代表起始的意思
$
:正则的结束位置,代表结束的意思
var str='2013-6-7';
var re=/(\d+)(-)/g;
var nstr=str.replace(re,function($0,$1,$2){
console.log($0);
console.log($1);
console.log($2);
});
/*
2013-
2013
-
6-
6
-
*/
第一个参数是这次匹配被替换的整体,之后的依次是每一个子项。
字符类
字符类 :中括号的整体代表一个字符
排除: ^
如果写在[]
里面,代表排除的意思。
var str='abc';
var re=/a[bde]c/;
var re1=/a[^ssde]c/;
console.log(re.test(str));
console.log(re1.test(str));
//true
//true
取出HTMl标签
var str="<h3 style='color:red;'>欢迎光临</h3>";
var re=/<[^>]+>/g;
console.log(str.replace(re,""));
正则表达式的常用方法
test()
正则去匹配字符串,如果匹配成功就返回真。
> var str='ereww'
undefined
> var re=/e/;
undefined
> re.test(str)
true
如果执行exec()
方法的正则表达式没有分组(没有括号括起来的内容),那么如果有匹配,他将返回一个只有一个元素的数组,这个数组唯一的元素就是该正则表达式匹配的第一个串;如果没有匹配则返回null。
var str= "cat,hat" ;
var p=/at/; //没有g属性
p.exec(str);//at
p.exec(str);//at
------
var str= "cat,hat" ;
var p=/.at/g; //注意g属性
p.exec(str);//cat
//继续调用会在原基础上匹配下去
p.exec(str);//hat
如果包含分组的话,返回的数组将包含多个元素,第一个元素是找到的匹配,之后的元素依次为该匹配中的第一、第二...个分组(反向引用)。
var re = /^(\d{3})-(\d{3,8})$/;
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null
var re = /(\d{3})-(\d{3,8})/g;
re.exec('010-12345-234-42334 345-4235');
//["010-12345", "010", "12345", index: 0, input: "010-12345-234-42334 345-4235"]
g
属性对exec()
函数是没有任何作用。
参考:http://www.cnblogs.com/xiehuiqi220/archive/2008/12/01/1327487.html
search()
正则去匹配字符串,如果匹配成功,如果匹配成功就返回成功的位置。失败就返回-1
。
> var str="we234DFEG";
undefined
> str.search(/df/i);
5
i
标识代表忽略大小写。 g
标识代表全局匹配。
match()
:正则去匹配字符串,如果匹配成功,就返回成功的数组。不成功就返回null
。
> var str='12341qwe1243534634';
undefined
> var re=/\d+/g
undefined
> str.match(re)
[ '12341', '1243534634' ]
replace()
:正则去匹配字符串,匹配成功的字符串去替换成新的字符串。
> var str='abcABC';
undefined
> re=/a+/ig
/a+/gi
> str.replace(re,"ppp")
'pppbcpppBC'
//或者可以这样写
> str.replace(re,function(word){
//有参数,被替换的字符
return '**';
});
量词
量词 :{}
{4,7}
:最小出现4次,最多出现7次。 {4,}
:最小出现4次 {4}
:正好出现4次
+
:{1,}
?
:{0,1}
*
:{0,}
贪婪匹配
正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。
var re = /^(\d+)(0*)$/;
re.exec('102300'); // ['102300', '102300', '']
//非贪婪匹配
var re = /^(\d+?)(0*)$/;
re.exec('102300'); // ['102300', '1023', '00']
使用+?
这样可以非贪婪匹配。
元字符
需要加\
才表示元字符意思的字符:
^ $ ( ) * + ? . [ \ { |
正则表达式练习网站