前端时间的自学的时候,怎么没吃透正则的用法,最近js有一定的提高,开始有时间补充漏洞的时候!
1.何为正则呢?
正则也叫规则,让计算机能识别人类的规则
2.正则的操作那些呢?---字符串的
3.正则的表达式:
var str=/正则表达式/;
var str=new RegExp("","");是字符串形式,当正则需要传参的时候,用正则的全称的写法
4.正则的常用的方法
test:正则去匹配字符串,如果匹配成果就返回时真true,反而时false
写法:正则.test(字符串);
例:
var str = 'abcdef';
var re = /b/;
alert( re.test(str) );*/---true;
/*\s : 空格
\S : 非空格
\d : 数字
\D : 非数字
\w : 字符 ( 字母 ,数字,下划线_ )
\W : 非字符*/
var str = '374829348791';
var re = /\D/;
if( re.test(str) ){
alert('不全是数字');
}
else{
alert('全是数字');
}
search : 正则去匹配字符串 , 如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回 -1
search的写法 : 字符串.search(正则)
正则中的默认 : 是区分大小写的
如果不区分大小写的话,在正则的最后加标识 i
var str = 'abcdef';
var re = /B/i;
//var re = new RegExp('B','i');
alert( str.search(re) );
match : 正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null
match的写法 : 字符串.match(正则)
正则默认:正则匹配成功就会结束,不会继续匹配
如果想全部查找,就要加标识 g(全局匹配)
量词 : 匹配不确定的位置
+至少出现一次
var str = 'haj123sdk54hask33dkhalsd879';
var re = /\d+/g;
alert( str.match(re) );
replace : 正则去匹配字符串,匹配成功的字符去替换成新的字符串,replace : 第二个参数:可以是字符串,也可以是一个回调函数
replace的写法 : 字符串.replace(正则,新的字符串)
var str = 'aaa';
var re = /a+/g;
str = str.replace(re,'b');
alert(str);
| : 或的意思
敏感词过滤:
window.onload = function(){
var aT = document.getElementsByTagName('textarea');
var oInput = document.getElementById('input1');
var re = /菲称|中国船|监视之下/g;
oInput.onclick = function(){
//aT[1].value = aT[0].value.replace(re,'*');
aT[1].value = aT[0].value.replace(re,function(str){
//函数的第一个参数:就是匹配成功的字符
//alert( str );
var result = '';
for(var i=0;i
匹配子项 : 小括号 () (还有另外一个意思,分组操作)
把正则的整体叫做(母亲)
//然后把左边第一个小括号里面的正则,叫做这个第一个子项(母亲的第一个孩子)
//第二个小括号就是第二个孩子
例:
var str = '2013-6-7';
var re = /(\d+)(-)/g;
str = str.replace(re,function($0,$1,$2){
//第一个参数:$0(母亲),第二个参数 : $1(第一个孩子)
//,第二个参数 : $1(第二个孩子)
//alert( $2 );
//return $1 + '.';
return $0.substring(0,$0.length-1) + '.';
});
alert( str ); //2013.6.7
例2:
var str = 'abc';
var re = /(a)(b)(c)/;
alert( str.match(re) ); //[abc,a,b,c](当match不加g的时候才可以获取到子项的集合)
字符类 : 一组相似的元素 [] 中括号的整体代表一个字符
例:
var str = 'abdc';
var re = /a[bde]c/;
alert( re.test(str) );*/
排除 : ^ 如果^写在[]里面的话,就代表排除的意思
/*var str = 'abc';
var re = /a[^bde]c/;
alert( re.test(str) );*/
var str = 'abc';
var re = /a[a-z0-9A-Z]c/;
alert( re.test(str) );
获取class的方法
找重复项最多的字符和个数
var str = 'assssjdssskssalsssdkjsssdss';
var arr = str.split('');
str = arr.sort().join('');
//alert(str);
var value = '';
var index = 0;
var re = /(\w)\1+/g;
str.replace(re,function($0,$1){
//alert($0);
if(index<$0.length){
index = $0.length;
value = $1;
}
});
alert('最多的字符:'+value+',重复的次数:'+index);
//量词 : {}
/*{4,7} : 最少出现4次,最多出现7次
{4,} : 最少出现4次
{4} : 正好出现4次
+ : {1,} //\d{1,}
? : {0,1} : 出现0次或者1次
* : {0,} : 至少出现0次*/
常用的正则表达式
高级表单校验
匹配中文:[\u4e00-\u9fa5]
行首行尾空格:^\s*|\s*$
Email:^\w+@[a-z0-9]+(\.[a-z]+){1,3}$
网址:[a-zA-z]+://[^\s]*
QQ号:[1-9][0-9]{4,9}
邮政编码:[1-9]\d{5}
身份证:[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x
把方法包在一个空间里
有人管他叫——命名空间
在公司里,把同一类方法,包在一起
JSON的使用
把之前的方法,包在一起
总结:
1 . 修饰词
i :匹配时忽略大小写
g : 匹配时全局匹配,查找所有匹配项,而非查找到一个既停止
2 . 匹配模式
方括号
---方括号用于查找某个范围内的字符:
表达式描述
[abc]查找方括号之间的任何字符。
[^abc]查找任何不在方括号之间的字符。
[0-9]查找任何从 0 至 9 的数字。
[a-z]查找任何从小写 a 到小写 z 的字符。
[A-Z]查找任何从大写 A 到大写 Z 的字符。
[A-z]查找任何从大写 A 到小写 z 的字符。
[adgk]查找给定集合内的任何字符。
[^adgk]查找给定集合外的任何字符。
(red&|blue&|green) 查找任何指定的选项。
转义字符
---转义字符Metacharacter)是拥有特殊含义的字符:
.查找单个字符,除了换行和行结束符。
\w查找单词字符。
\W查找非单词字符。
\d查找数字。
\D查找非数字字符。
\s查找空白字符。
\S查找非空白字符。
\b匹配单词边界。
\B匹配非单词边界。
\0查找 NUL 字符。
\n查找换行符。
\f查找换页符。
\r查找回车符。
\t查找制表符。
\v查找垂直制表符。
\xxx查找以八进制数 xxx 规定的字符。
\xdd查找以十六进制数 dd 规定的字符。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。
量词
量词描述
n+匹配任何包含至少一个 n 的字符串。
n*匹配任何包含零个或多个 n 的字符串。
n?匹配任何包含零个或一个 n 的字符串。
n{X}匹配包含 X 个 n 的序列的字符串。
n{X,Y}匹配包含 X 或 Y 个 n 的序列的字符串。
n{X,}匹配包含至少 X 个 n 的序列的字符串。
n$匹配任何结尾为 n 的字符串。
^n匹配任何开头为 n 的字符串。
?=n匹配任何其后紧接指定字符串 n 的字符串。
?!n匹配任何其后没有紧接指定字符串 n 的字符串。
RegExp 对象方法
方法描述
compile编译正则表达式。
exec检索字符串中指定的值。返回找到的值,并确定其位置。
test检索字符串中指定的值。返回 true 或 false。
支持正则表达式的 String 对象的方法
方法描述
search检索与正则表达式相匹配的值。
match找到一个或多个正则表达式的匹配。
replace替换与正则表达式匹配的子串。
split把字符串分割为字符串数组。
原文链接://www.greatytc.com/p/4fb6354708e6
一、什么是正则表达式(Regular Expression)
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑( 即用这种方法来匹配想要的东西)。
文/XZ阳光小熊(简书作者)
原文链接://www.greatytc.com/p/786938bb6d6f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。