先看例子
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,'');
解決(傳統(tǒng))方法二
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') 基中回調(diào)中的參數(shù)a表示包括u a 在內(nèi)的子字符串 其中回調(diào)中的參數(shù)b表示子匹配也就是與正則小括號里的匹配子串 其中1表示第一個匹配子串
其它示例
一鲸睛、經(jīng)常看到的模板引擎有{{= 某個變量 }}
比如:<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));