先看例子
var str ='u28a,u98234a,u76a,x4,u999,766a';
// 如何从字符串中得到 28,98234,76,x4,999,766
解决方法一
将字符串中的u和a全部去掉
str = str.replace(/u/g,'').replace(/a/g,'');
//或者(文兄告诉我的) str = str.replace(/u|a/g,'');
解决(传统)方法二
while(str.includes('u')){
str = str.replace('u','');
}
while(str.includes('a')){
str = str.replace('a','');
}
解决方法三
var arr = str.split('u')
str = arr.join('');
arr = str.split('a');
str = arr.join('');
解决方法四
var reg = /u?(.*?)a?/g;
str = str.replace(reg,(a,b)=>b);
//或者用 str = str.replace(reg,'$1');
其它解决方法...
分析
我只打算分析一下方法一和方法四,因为我个人正则比较那个
在js中正则的实例不一定要通过new Regex()去实例化
一、/u/g 或 /u|a/g
其中 /u/ 只要串串中包含字母u就会匹配成功 最后的字母g表示全局匹配。
其中 | 表示或者 u|a 为 u或a
二、/u?(.*?)a?/g
u?表示有一个或者没有u,问号在这里是表示有一个或没有
a?表示有一个或者没有a,问号在这里是表示有一个或没有
()表示子匹配
.表示匹配除换行符 \n 之外的任何单字符
表示任意个前面的字符
? 在这里是指明一个非贪婪限定符,匹配最少的字符。
三、str.replace(/u?(.?)a?/g,(a,b)=>b) 或 str.replace(/u?(.?)a?/g,'1') 基中回调中的参数a表示包括u a 在内的子字符串 其中回调中的参数b表示子匹配也就是与正则小括号里的匹配子串 其中1表示第一个匹配子串
其它示例
一、经常看到的模板引擎有{{= 某个变量 }}
比如:<span> {{= str }} </span>
var str = 'Hello world';
var template = '<span> {{= str }} </span>';
var reg = /{{=\s(.*)\s}}/g;
var html = template.replace(reg,(a,b)=>eval(b));
//html will
二、找出简历中的手机号并隐藏
var str = '姓名:张三手机: 13838383838邮箱: xxoo@qq.com\nasdfasf 13838383838';
var str2 ='姓名张三手机13838383838邮箱 xxoo@qq.com';
//要把其中的手机和邮箱改成***
var regMobile = /(0?\d{11})/g;
str = str.replace(regMobile,'***');
//变成138****3838
var regItem = /\d{3}(\d{4})\d{4}/;
str2 = str2.replace(regMobile,(a,b)=>a.substr(0,3)+'****'+a.substr(7));
网友评论