正则表达式
来源:互联网 发布:重庆悦来数据谷 编辑:程序博客网 时间:2024/06/18 14:49
1.正则表达式 regular expression
-用于查找 含有 匹配字符串(判断完全相等) 和 匹配元字符(通配符) 的字符串
——>你要找什么,从哪找,你要找多少<——
2.正则表达式对象
-由正则表达式创建的对象
-该对象可以进行 匹配,提取和替换
创建正则表达式对象
1)构造函数 (显式)
var regex = new RegExp ( 正则表达式字符串 [, 匹配模式]);
2)字面量(隐式)
var regex = /正则表达式/;
———-
使用正则表达式进行匹配
语法: 正则对象.test ( 字符串 ) -> bool类型
如果参数字符串中含有 复合 正则匹配的 子字符串, 就返回true ,否则返回 false
—例如:查找一段文字中是否包含ashin
var str = 'qqqqwertyioplkjashinmnbvcxz';
//找ashin,则正则表达式可用'ashin'来表示
//1.创建正则表达式对象
var r1 = new RegExp( ' ashin' );
var r2 = /ashin/;
//2.检查匹配
var res = r2.test( str );
console.log( res );
—传统字符串操作
var str = 'qqqqwertyioplkjashinmnbvcxz';
var search = 'ashin';
for(var i =0;i<str.length-search.length;i++){
//判断str[ i ] 开始 的字符串是 ashin
if( search == str.substr( i,search.length) ){
console.log( i );
break;
}
}
3.基本元字符
意义 用法
.
表示任一个非换行的字符
(任意字符.无限制)
foot foo. ( )表示分组和提高优先级 [ ]表示一个字符,出现在 [ ]中的字符[abc] ,出现在 [ ] 中的任意一个字符,
匹配 a , 或 b 或 c
|或
允许使用多个字符匹配
a | b | c
正则表达式 | 正则表达式
foot 或 food foot | food
foo( t | d)
转义字符 : \
表示点: \ .
表示 [ ] : \ [ \ ]
表示( ) : \ ( \ )
表示 \ : \ \
4.限定元字符(你要找多少)
*
紧跟前面的一个字符或一组字符出现 0 次到 多次
表示:12333333 后面很多3
正则: 1233* –123 0次 –1233 1次 –12333 2次 – 123333333
1( 23 )* 表示 –1 0次 –123 1次 –12323 2次
+紧跟在前面的字符出现 1 次到 多次
123+
?紧跟在前面的字符出现 0 次或 1次
查看一串字符串中是否含有http或https
http://.+ | https://.+
https?://.+
5.首尾正则表达式
^ 表示必须以xx开头
^a 必须以 a开头的字符串
a 表示一个字符串中只要含有 a 就可以匹配
^a^a 非法的写法, ^,若表示开头,必须写在开头,且只能写一个
$ 表示 必须以 xxx 结尾
a$ 必须以 a 结尾
——案例
1> 身份证号:^[0123456789]{17}[0123456789x] $
2> 邮箱:^[0-9a-zA-Z]+@[0-9a-zA-Z]+(\ . [0-9a-zA-Z]+)+$
3> 匹配任意数字(考虑0和正负):^(-?[1-9] [0-9]*| 0 )$
4>匹配指点范围的数字 0 -233 (考虑1位,2位和3位):
^ ( [0-9] | [1-9] [0-9] | 1[0-9] [0-9] | 2[ 0-2][0-9] | 23[0-3] ) $
5> 匹配小数(考虑正负):^( ( - ?[1-9][0-9]* | 0 )( \ .[0-9]*[1-9] ) )$
6>匹配小数和整数(考虑小数点后字符出现0次或1次):
^( ( -? [1-9][0-9]* )( \ . [0-9] *[1-9] ) ? )$
6.简写元字符
\s 空白字符,包括空格,tab 回车换行等
\S 非空白字符
js 中常常使用[ \s \S ] 表示任意字符
\w 表示字符,包含字母,数字,下划线
\W 非字符
\d 数字
\D 非数字
——–
匹配test /^正则$/
提取exec /正则/
——–
7.提取 exec
语法: 正则表达式对象.exec ( 字符串 ) ->封装成数组
var str ='qwertyuiopashinlkjhgfdsa';
var r =/ashin/
var res = r.exec('ashin');
console.log(res);
8.循环提取
将一个字符串中符合要求的字符串都提取出来
1>正则表达式需要使用全局模式
var r = new RegExp ( ‘正则’ , ‘g’ ); g -> global
var r = /正则/g;
2> 调用 exec 首先获得第一个匹配项
反复调用获得所有匹配项
若全部匹配完,还调用,则返回 null
var str ='qwer123poiu456lkjhg789asdf'
var r =/\d+/g;
//r.exec(str) ->123
//r.exec(str) ->456
// r.exec(str) ->789
// r.exec(str) ->null
var res;
while(res=r.exec(str)){
console.log(res);
}
9.将匹配的结果进行解析 [提取内容步骤123 加括号( )
[注:正则表达式中,分组有编号,从左往右’(‘. 从1开始 ,匹配提取的结果中,对应的编号就可以获得分解的数据]
—解析邮件地址
//将邮箱全部提取出,名字和主机名
var str='我有一个邮箱, 是 itcast@itcast.cn, 还有 abc@126.com, 和 1234567@qq.com'
//循环提取的正则表达式
var r = /[a-zA-Z\d]+@[a-zA-Z\d]+(\.[a-zA-Z\d]+)+/g;
//再次分解 (加括号分组形式)
var r = /([a-zA-Z\d]+)@([a-zA-Z\d]+(\.[a-zA-Z\d]+)+)/g;
10.匹配但不去捕获的元字符
( ? :其他正则表达式内容 )
11.截取字符串中的一个 html 标签
1>标签使用<> .So正则表达式写成 <\w+>
2>与之匹配的标签名
在正则表达式中国使用组匹配到某一个数据,允许在该正则表达式中使用’\数字’的方式引用该组 ( 一组标签名<p></p>)
<(\w+)>.*<\ / \1>
var str = '123<div>456</div>78<div>9</div>0<i></i>abc';
var r = '/<(\w+).*(\ / \ 1)>/g';
var res;
while(res=r.exec(str)){
console.log(res[0]);
}
12.贪婪模式 (尽可能多的匹配)
正则表达式中,涉及到次数限定,默认尽可能多的匹配
取消贪婪模式,在次数限定符后加?
注:贪婪模式性能高于非贪婪模式–
\d+\d+\d+
123
取消贪婪模式
\d+?\d+\d+
13.否定元字符
语法: [ ^字符 ]
非指定字符
[ ^abc ] 不是a,b,c
14.字符串的替换
语法:
字符串.replace( 查找字符串,替换字符串 ) -> 字符串
1> 字符串替换方法
字符串1.replace( 字符串2, 字符串3 )
在 字符串1 中找到 字符串2,将其替换成 字符串3 ,返回替换后的字符串
特点: 只替换第一个找到的字符串
“aaa”.replace( ‘a’, ‘A’ ) -> ‘Aaa’
2>正则替换
字符串.replace( 正则表达式, 字符串 ) -> 字符串
1.简单替换
‘aaaaa——bbbb—-ccc’.replace( /-+/,’-‘) -> aaaaa-bbbb—-ccc
‘aaaaa——bbbb—-ccc’.replace( /-+/g,’-‘) ->aaaaa-bbbb-ccc
2.分组替换 ( 使用 $数字 来引用替换的数据 )
‘abc123’.replace( /( \d+ )/,’d$1’ ) ->’ abcd123’
‘1999-1-11’.replace( / ( \d+ ) - ( \d+ ) -( \d+ ) / ),’
3>函数参数用法
语法:
字符串.replace( 正则表达式, fn )
邮箱: / \w+@\w+( \ . \w+)+/g
‘我的邮箱是:abc@itcast.cn, 你的邮箱是: defghijk@itcast.cn’.replace( /\w+@\w+(\.\w+)+/g, ‘*’ );
‘我的邮箱是:abc@itcast.cn, 你的邮箱是: def@itcast.cn’
.replace( /(\w+)@(\w+(\.\w+)+)/g, function ( s, g1, g2, g3 ) {
return ‘*’;
} );
// 要求 只显示 第一个字符, 其余的都是用 * 表示
‘我的邮箱是:abc@itcast.cn, 你的邮箱是: defghijklim@itcast.cn’
.replace( /(\w+)@(\w+(\.\w+)+)/g, function ( s, g1, g2, g3 ) {
// 将用户名 变成 a***** 的形式
var first = g1.charAt( 0 );
var start = [];
for ( var i = 0; i < g1.length - 1; i++ ) {
start.push( ‘*’ );
}
return first + start.join(”) + ‘@’ + g2;
} );
- 【正则表达式】正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- js实现自定义右键菜单
- Android多屏幕适配-平板
- GeneratedValue
- AHK 2017年教学视频导航页面2:
- pat-basic-1047-c语言
- 正则表达式
- Dubbo架构设计详解
- 聊一聊软件测试的三大测试方向
- excel学习笔记--函数、VBA
- http://lib.csdn.net/litao0942051021/chart/Java学习
- 大数加法
- Linux下安装Java环境配置步骤详述
- 华为OJ-----最后一个单词长度
- 在控制台打印一个圆