js 形象化理解正则表达式

406 阅读3分钟

一、正则表达式

1.1、 自己对正则表达式的认识

字面意思理解

  • (有规则的表达式)(regular Expression)(regex)(RE)

个人理解

  • 字符串————(比喻成一堆刚收好的稻谷)
  • 字符串的方法 match等 ————(比喻成筛选工具)
  • 正则表达式————(比喻成这这个筛选工具的孔的大小)
  • 得到的结果————(就是已经筛选过的稻谷)
  • 稻谷筛选的合不合格,取决于工具的孔是否合适,孔过大就会把渣子筛进去了,孔太小又会筛不出稻谷来。

二、如何使用正则表达式

  • 第一步:先准备一堆未经过筛选的稻谷 ————定义字符串并初始化
var str = '(:match_product_num-1)*30'
  • 第二步:想要得到什么样品质的稻谷———— 想要得到一个表达式(match_product_num-1)*30
  • 第三步:准备好使用的工具并分析选择怎样合适的孔去筛选————选择工具
    • 思考一:怎样将孔安装到筛子上面?
    • 思考二:使用这些工具筛选过后的结果到底是什么?仅仅是一堆除去渣滓的稻谷,还是已经将大米已经去壳筛选出来了?

工具代表 test()、search()、replace()、match()、split()

2.1、工具介绍

test()

正则表达式.test(str)

  • 功能:在字符串中查找符合正则的内容,
  • 返回结果:true——找到符合正则的内容
  • 返回结果:false——没有找到符合正则的内容

根据返回结果可以利用test()方法来做为判断条件

var str = '374829348791';
var re = /\D/; // \D代表非数字
if ( re.test(str) ) { 
    // 返回true,代表在字符串中找到了非数字。
    console.log('不全是数字');
} else {
    console.log('全是数字');
}

search()

字符串.search(正则表达式)

  • 功能:在字符串中查找符合正则的内容,
  • 返回结果:返回出现的位置(从0开始,如果匹配的不只是一个字母,那只会返回第一个字母的位置)
  • 返回结果:-1 ——搜索失败

根据返回结果可以利用search()方法来查找某一个字符在字符串中的位置

var str = 'abcdef';
// i——ignore(正则中默认是区分大小写的 
// 如果不区分大小写的话,在正则的最后加标识 i )
var re = /B/i;
console.log( str.search(re) );

match()

字符串.match(正则表达式)

  • 功能:在字符串中查找符合正则的内容,
  • 返回结果:数组——搜索成功返回搜索的内容
  • 返回结果:null ——搜索失败

例子:在下列字符串中找出指定格式的所有数字,如下找到 123,54,33,879

var str = 'haj123sdk54hask33dkhalsd879';
var re = /\d+/g; 
var result = str.match(re) 
console.log (result) 

// [123,54,33,879]

replace()

字符串.replace(正则表达式,新的字符串/回调函数)

  • 功能:查找符合正则的字符串,就替换成对应的字符串
  • 返回结果:新的数组
  • 在回调函数中,第一个参数指的是每次匹配成功的字符

例子:敏感词过滤,比如 我爱北京天安门,天安门上太阳升。------我爱*****,***上太阳升。 即北京和天安门变成号,

var str = "我爱北京天安门,天安门上太阳升。";
var re = /北京|天安门/g; 
var str2 = str.replace(re,'*'); 
console.log (str2)

//我爱**,*上太阳升 

显然上面不符合要求

var str = "我爱北京天安门,天安门上太阳升。";
var re = /北京|天安门/g; 
var str2 = str.replace(re,function(str){
    console.log(str); // 北京  天安门  天安门
    var result = '';
    for(var i=0;i<str.length;i++){
        result += '*';
    } 
    return result; //所以搜索到了几个字就返回几个* 
});
console.log (str2) 

//我爱*****,***上太阳升