正则表达式的学习之一

正则

认识正则

作用是什么,怎么用,相信很多人都有这样的疑问,所以学习正则之前先要做的就是认识他:

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。搜索模式可用于文本搜索和文本替换。
正则表达式是由一个字符序列形成的搜索模式。
当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
正则表达式可以是一个简单的字符,或一个更复杂的模式。
正则表达式可用于所有文本搜索和文本替换的操作。

用途可以用于表单验证,替换字符,批量匹配结果等等。

语法是/匹配规则/修饰符号。
举个小例子:

var reg = new RegExp('时间');
console.dir(reg);
var str = '小时,分钟,秒钟';
var reg1 = /['钟']/g;
var res = str.match(reg1);
console.log(res);
var res1 = str.replace(/['钟']/g,'Clock');
console.log(res1);

大可以试试输出,看看结果发生了什么变化。

修饰符

举个例子

var str = '去年,今年,明年';
var reg = /[年]/;
var reg1 = /[年]/g;
console.log(str.replace(reg,'来'));
console.log(str.replace(reg1,'来'));

console的输出结果如下:
去来,今年,明年
去来,今来,明来
很明显,前者只是匹配到一个满足规则的就替换了然后不再继续匹配了,所以仅仅将第一个去年的年换成了来,二后者则将所以年替换了。原因就是g是全局匹配1,在整个字符串中匹配。此外i是忽略大小写的匹配。

正则字符串

正则字符分为原义文本字符和特殊字符(元字符)。
原义文本字符就是原本意义的文本字符
举个例子:

var reg = /[a]/;
var reg1 = /[0123456789]/g;
var reg2 = /[0123456789]{3}/g;
var reg3 = /[0123456789]{1,5}/g;
console.log('123456abc1abc'.match(reg));
console.log('123456abc1abc'.match(reg1));
console.log('123456abc1abc'.match(reg2));
console.log('123456abc1abc'.match(reg3));

输出结果如下:
在这里插入图片描述
/[a]/:匹配到满足单个a字符输出。
/[0123456789]/g :匹配 0-9 字符串长度为1 ,可以得到多个结果。
/[0123456789]{3}/g : 匹配0-9 多个结果 每个字符长度都是3。
/[0123456789]{1,5}/g: 最长连续5个数字并且匹配到,最少1个,优先长度从高到低。

当遇到如下情况又该怎么分析:

var reg = /[0123456789]
[abcdefghijklmnopqrestuvwxyz]/g;
var reg1 = /[0-9][a-z]/g 
var str = 'a1fjwqeirx6s6s5qw8wxs7s8w8ss6';
console.log(str.match(reg))

其中reg1 === reg。
该情况匹配2个字符;每个字符长度为1, 第一个字符0-9数字 第二个字符 a-z字符。

字符类

待匹配字符
正则字符
结果字符
一般一个正则字符匹配一个待匹配字符 ;
字符类 是匹配一类字符或者多类字符;
[] 字符类是【泛指】的;不是某个特定的。

var reg1 = /人/ ;// 人 一个正则字符
var reg = /[0-9]/g     // [0-9] 一个字符类 
var str = 'hdfuwe43423jfdjri3423jrreu'; 
// 等待匹配字符

var reg2 = /(好人坏人)|(平凡的人)/g
var str = '好人坏人平凡的人'
console.log(str.match(reg2))
字符类取反

取反符号就是^,举个例子如下

var reg = /[^0-9]/g  // 除了0-9 其他都匹配
 var str = 'dfjewir324324jfaioe===___===dfasf'
console.log(str.match(reg))
var reg2 = /[^a-zA-Z]/g 
var reg3 = /[^0-9a-zA-Z_]/g;
var str2 = '我是一个好人,也是一个平凡的人1234abcd_';
console.log(str2.match(reg3));

第一个输出的是除了0-9数字全部都匹配输出;
第二个输出的是除数字字母下划线全部匹配输出。

元字符
var reg = /[0-9]/g
var reg = /\d/g  // 匹配0-9字符
 var reg = /[0-9a-zA-Z_]/g // 数字字母下划线
 var reg = /[\w]/g     // 匹配数字字母下划线

var reg1 = /^\d[a-zA-Z]$/g  // 仅能匹配 字符长度为2开始是数字结尾是字母的
 var str = '3d'
var str2 = '2djfqwoeruj3243fsrewor4234jfwqei4o3g'
console.log(str.match(reg1))
console.log(str2.match(reg1))

 // 撇配 必须以为1开头;结尾无所谓 长度不限
var reg3 = /^[1][^\s]{1,}/g
var str3 = '1rowqeiur93333我'
var str4 = 'd1232dew'

console.log(str3.match(reg3));
console.log(str4.match(reg3));
        
// 手机号码   仅开头为1 结尾是长度为1的字符 结果为11位数的数字
var reg5 =/^1\d{10}$/g // 开头 1 结尾数字;2个字符;第一个字符长度1 长第二个字符长度10;

 var iphone= '133258963456895525'
console.log(iphone.match(reg5))
console.log('112345'.match(reg5))  // 因为第二个字符长度不满组

// 边界类
var str8 = '小刚是一个好人,也是一个诚实的人';
var reg7 = /\B是\B/g;
console.log(str8.match(reg7));    

var str9 = 'this is xiaogang he is a honest people';
var reg8 = /\bis\b/g;    // 单词界限;匹配 is
console.log(str9.match(reg8)) 
量词

量词 设置 匹配字符的长度
{m,n} 匹配字符长度 最小m 最大n
{n,} 匹配字符长度 大于等于n
{n} 匹配字符长度为n

.任意字符 . 点

var reg = /^.{3}$/  // 验证长度为3任意字符
var str = 'sss'
console.log(str.match(reg))

只能为数组 不限制长度

var reg = /^[0-9]{1,}$/;
var str = "32432hfriweque4234324";
var str1 = "123123123";
console.log(str.match(reg));
// 验证某一个字符是否符合正则
// regxp.test(str)  验证某一个字符是否符合 正则表达式;返回 true false0
console.log(reg.test(str1));
//exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
 console.log(reg.exec(str1));
     
// 匹配 首部或者尾部为宫格
var reg1 = /^\s{1,}|\s{1,}$/g
var str3 = '            ddddddd   dddddd          ';
console.log(str3)
console.log(str3.replace(reg1,'-'));

// 需求:去除一个字符串中素有空格
// 匹配所有空格
var reg4 = /\s{1,}/g
console.log(str3.replace(reg4,''))
贪婪模式和非贪婪模式
// +   === {1,}
// *   === {0,}
// ? 非贪婪模式
var str = "djdjeiehwked383275kjd73895ne8723995b3481239b3f74e3hdjsd7r2384";
var reg = /\d{3,5}?/;
var reg1 = /\d{3,5}/;
onsole.log(str.match(reg));
console.log(str.match(reg1));

var reg2 = /\d+/g; // + 贪婪
var reg3 = /\d+?/g; // 非贪婪
console.log(str.match(reg2));
 console.log(str.match(reg3));

var reg4 = /\d{0,}/g;
var reg5 = /\d*/g;

console.log(str.match(reg4));
console.log(str.match(reg5));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值