32、正则表达式
来源:互联网 发布:java 字符串排序函数 编辑:程序博客网 时间:2024/06/08 14:17
正则表达式(regular expression)
其实就是代表一种 给计算机去看的规则
描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 // reg.test( str ) 如果满足规则,返回true,否则返回false
// 正则里面的特殊字符 \ / { } + . ? * ( ) [ ] ^ $
1、写法与用法:
写法1:var reg = /qwe/;
写法2:var reg1 = new RegExp('qwe');
用法1:.test();
正则.test( 字符串 )
匹配成功 返回true 否则 返回false
用法2:match();
字符串.match( 正则 );
匹配成功 返回匹配结果的数组
匹配不成功 null;
用法3:search()
字符串.search( 正则 );
匹配成功 返回字符所在位置
匹配不成功 返回-1
用法4:replace
字符串.replace(正则 , 参数); 把匹配成功的东西替换成字符串;
参数 : 可以是一个字符串,也可以是一个匿名并且带return的函数
当是函数的时候:可以接收形参,return 什么 替换成什么
function( 匹配整体 , 第一个子项 , 第二个子项 , ){//其中的 匹配整体 , 第一个子项 , 第二个子项 , …… 名可以随意名,符合规则就行
return xxxx;
}/*具体应用见第9*/
例子:
var str = 'abdcef';var reg1 = /abc/;
if( reg1.test( str ) ) {
alert( '匹配成功' );
}else{
alert( '匹配失败' )
};//验证字符串中str中是否有qwe这个字符串;也可验证中文
var str = 'dsgud3456jgfuyj789';
var a = /\d+/g;
var arr = str.match( a );
alert( arr );
var str = '4afei6afei4dfiafei54dnfi';
var r = /afei/g;/*g不管用,一旦找到就立即返回*/
var a = str.search( r );
alert( a )
2、 转义 \
/*\s 空格
\S 非空格
\d 数字
\D 非数字
\w 字符(字母 数字 _)
\W 非字符
\b 独立部分(空格 开始 结束 -)
\B 非独立部分
\跟上特殊意义的字符
*/
注意:var reg = new RegExp('\\d+',"g"); 采用这种写法的时候转义字符加两个\ ,g和i要写在后面
例如:var reg = /\//; //验证指定字符串是否有/,不能写成var reg = /\/; 转义\是将其后的有意义的字符转为无意义的字符,例如var a='\';此处''为一个字符串的起止符,由于中间添加了一个转义\,所以其后的'有意义的'被转成了无意义的',所以此该字符串赋值表达式后没有结束符了。需要验证字符串中是否存在有其他特殊意义的字符的时候,都需要加上转义\。
3、量词:{}
/*{1,5} : 1 <= n <= 5
{2,} : n >= 2
{1,} : n >= 1
{+}: n >= 1
{0,} : n >= 0
{*} : n >= 0
{0,1} : ? : 0 <= n <= 1
{?} : 0 <= n <= 1
*/
// match : str.match( reg ); 满足匹配规则,把匹配成功的内容放到一个数组里面,返回数组,否则返回null,
例子:
var reg = /w+q/;//匹配字符串中是否有n个w加上一个q的字符串
var str = 'wwwwq';
var arr = str.match( reg );
alert( arr );//弹出wwwwq
var reg = /w{2,3}/;
var str = 'wwwwq';
var arr = str.match( reg );
alert( arr );//弹出wwwq //最前方的一个w自动丢弃
4、标识
写在正则表达式之后
g : 全局匹配 (从头到尾匹配完)i : 不区分大小写 ,平时不带i代表默认区分大小写
例如:
var reg = /w+/g;
var str = 'Wqwwqwwwqwwww';
var arr = str.match( reg );
alert( arr );//弹出ww,www,wwww
var reg = /w+/ig;
var str = 'Wqwwqwwwqwwww';
var arr = str.match( reg );
alert( arr );//弹出W,ww,www,wwww
5、子集: ()
当有子项,并且没有全局标识g的时候,match返回的数组的第二项代表子集内容var reg = /(qw)+(ss)/; //匹配子项1 (qw) 匹配子项2 (ss)
var str = 'qwqwssqqwsqwqwqw';
var arr = str.match( reg );
alert( arr );//弹出qwqwss,qw,ss
6、字符集: [ ] (简称匹配某一位)
[0-9] : 从0到9中的其中任意一个数字[a-z] : a - z中的其中任意一个字母
[A-Z] : A - Z中的其中任意一个字母
备注:不可以倒序,例如[5-1],[f-a];
字符集里面的( 除了\)的其他特殊字符都不特殊,是单纯的没有意义的字符,跟其他字母数字一样
[F-K] : F - K中的其中任意一个字母
[FK] : F或者K
[ew0-9] : e或者w或者数字0-9
例如:
var reg = /[1-5]/g;
var str = 'we23w4';
var arr = str.match( reg );
alert( arr );//弹出2,3,4
var reg = /[a-z]/g;
var str = 'we23w4';
var arr = str.match( reg );
alert( arr );//弹出w,e,w
var reg = /[we]/g;
var str = 'we23w4';
var arr = str.match( reg );
alert( arr );//弹出w,e,w
var reg = /[ew0-9]/g;
var str = 'we23w4';
var arr = str.match( reg );
alert( arr );//弹出w,e,2,3,w,4
var reg = /[e(}w0-9]/g;
var str = 'we23}w4(';
var arr = str.match( reg );
alert( arr );//弹出w,e,2,3,},w,4,(
7、其他小知识点综合:
. 任意字符都行^ 开始 在字符集[]里面使用是 非
$ 结束
var reg = /^q/;
var str = 'q.qw';
var arr = str.match( reg );
alert( arr );//弹出.
8、或者
|
var reg = /阿飞|恋雪/;
var str = '阿飞童鞋';
alert( str.match( reg ) );//弹出阿飞
var reg = /阿飞(老师|童鞋)/;
var str = '阿飞童鞋';
alert( str.match( reg ) );//弹出阿飞童鞋,童鞋
9、replace
str.replace( reg , strA ); 把匹配成功的东西替换成strA;
/*
strA : 可以是一个字符串,也可以是一个匿名并且带return的函数
当是函数的时候:
可以接收形参
return 什么 替换成什么
function( 匹配整体 , 第一个子项 , 第二个子项 , …… ){//其中的 匹配整体 , 第一个子项 , 第二个子项 , …… 名可以随意名,符合规则就行
return xxxx;
}
*/
var reg = /qqw/;
var str = 'werqqwwer';
var a = str.replace( reg,"aaa");
alert(a);//弹出weraaaer
var str = 'werqqwwer';
var reg = /qqw/;
var a = str.replace(reg,function(){
return '123';
});
alert( a );//弹出wer123wer
var str = 'werqqw2wer';
var reg = /qq(w)(2)/;
var wangdachui = 'wan';
var a = str.replace(reg,function(wangdachui ,ligoudan,hehe){
console.log(wangdachui);//qqw2
console.log(ligoudan);//w
console.log(hehe);//2
return 12345;
});
alert( a );//弹出wer123wer
屏蔽关键词:
<!DOCTYPE HTML><html><head><title>please enter your title</title><meta charset="utf-8"><meta name="Author" content=""><style type='text/css'>*{ margin:0; padding:0;}</style></head><body><script type="text/javascript">var str = '你妈的你个垃 圾';var reg = /傻.*逼|垃.*圾|S.*B|他.*妈.*的|你.*妈.*的|shabi/gi;var newStr = str.replace( reg , function( $0 ){var str = '';for (var i=0;i<$0.length;i++ ){str += '*';}return str;});alert( newStr );</script></body></html>
小案例:
<!DOCTYPE HTML><html><head><title>please enter your title</title><meta charset="utf-8"><meta name="Author" content=""><style type='text/css'>*{ margin:0; padding:0;}</style></head><body><input type="text" id='txt' placeholder='请输入您的邮箱' /><script type="text/javascript">var oTxt = document.getElementById('txt');/*QQ号的规则:只能是数字长度 : 5 10不能以0开头邮箱的规则: 371874535@qq.com jii433@163.cn.com手机号规则11 1 数字 */ var regQQ = /^[1-9]\d{4,9}$/; var regMail = /^\w+@[0-9a-zA-Z]{2,}(\.[a-zA-Z]{2,}){1,2}$/; var regTel = /^1[34578]\d{9}$/; var regID = /^[1-9]\d{16}[0-9xX]$/;oTxt.onblur = function(){var val = this.value;if ( val.length ){if ( regMail.test( val ) ){alert( 'OK' )}else{alert( '您输入的邮箱不满足要求' );}}}</script></body></html>
- 32、正则表达式
- 【正则表达式】正则表达式
- 第 32 章 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- hitTest:withEvent使用
- Unsupported major.minor version 51.0 异常处理方法
- iOS开发中WiFi相关功能总结
- KJFrameForAndroid 资料——KJBitmap使用方法
- LoadRunner之并发用户数与迭代关系
- 32、正则表达式
- 面试题35:第一个只出现一次的字符
- Looper、MessageQueue、Handler三者关系理解
- 安卓字体渲染器
- CodeBlocks主程序添加头文件失败解决方法
- mysql的备份
- 设置Android app的字体不随系统全局字体大小的变动而变动
- Codeforces697B Barnicle 模拟
- Gym 100735 - I. Yet another A + B