加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

JavaScript RegExp 基础详谈

发布时间:2016-10-31 19:53:30 所属栏目:教程 来源:站长网
导读:副标题#e# 前言: 正则对于一个码农来说是最基础的了,而且在博客园中,发表关于讲解正则表达式的技术文章,更是数不胜数,各有各的优点,但是就是这种很基础的东西,如果我们不去真正仔细研究、学习、掌握,而是抱着需要的时候,就去网上找现成的正则表达

      我们知道修饰符m表示多行匹配,而^$表示匹配的开始于结束位置,那么如果这两种情况如果一起使用,或者分别使用,有什么区别呢?
        ^$m:不仅匹配字符串的起始于结束位置,还会匹配每一行的起始于结束位置。
        ^$:只匹配字符串的起始于结束位置。
      示例:

1 var str = 'hellow WorldnWorldnaWorld',
2 pattern1 = /World$/g;
3 pattern2 = /^World$/gm;
4 pattern1.exec(str);    // -> index:20 
5 pattern2.exec(str); // -> index:13

      由此我们可以看出对于正则来说,字符串如果存在多行,那么每一行都会存在^$匹配操作。

    · Number 指定重复分组

      在分组匹配捕获时,也可以在正则规则中指定n(注:n:1-9)的形式来代指某个分组的值。

      示例:

1 var str = 'abcabc',
2 pattern = /(.)b(.)1b2/;
3 pattern.test(str); // -> true

      示例:找出重复最多的字符。

 1 /*  
 2  * 方法说明
 3  * split('') 将字符通过“空字符”来拆分为数组。
 4  * sort() 将数组元素的值按照ASCII码进行排序。
 5  * join('') 将数组转换为字符串。
 6   
 7 */
 8 
 9 var str = 'abcababaaaccddcd',
10      pattern = /(w)1+/g,
11      len = 0,
12      result = '',
13      data = '';
14 
15 str =  str.split('').sort().join('');    //通过这些步骤,我们可以得到一个具有相同字符Y一起排列出现的新字符串。aaaaaabbbccccddd
16 while(result = pattern.exec(str)){
17 
18     if(result[0].length > len){
19         len = result[0].length;
20         data = RegExp.$1;
21     }
22 }

    · 换行匹配

      在正则中字符串的换行是用n进行表示的。

      示例:

1 var str = '1.baidun2.googlen3.bing';
2 var pattern1 = /d/g;    //此种方式也可以做到,但是建议使用标准的换行模式。
3 var pattern2 = /^d/gm;
4 document.write(str.replace(pattern1,'#'));
5 document.write(str.replace(pattern2,'#'));

 

  除了RegExp对象具有支持正则表达式的方法外,字符串String对象也具有可以支持正则表达式作为参数进行匹配筛选的的方法。

  4.1 replace()

    格式:str.replace(pattern,given);
    功能:根据匹配规则pattern来用指定的内容given去替换str或其部分字符。
       其中pattern可以是str中的部分字符也可以是一个正则表达式。

    示例:

1 var str = 'i see you See you';
2 var pattern = /you/;
3 str.replace(pattern,'*'); // -> i see * See you

    注意:given所代表替换的指定内容,既可以是字符串,也可以是一个回调函数。

1 var str = 'i see you See you';
2 var pattern = /byoub/g;
3 str.replace(pattern,function(result,[$1...$9],index,input){});

      · result : 表示当前匹配的结果
      · [$1 - $9] : 存在分组的情况下,表示当前 1 - 9 个分组的内容。
      · index : 当前匹配内容首字母在字符创中索引。
      · input :进行匹配的原字符创。

    示例:敏感词过滤

 1  var str = '世界上最遥远的距离 不是生与死的距离 而是我就站在你的面前 你却不知道我爱你。',
 2         st = ['死','爱','距离'],
 3         pattern = '',
 4         alt = '';
 5 
 6   for(var i=0;i<st.length;i++){
 7 
 8 
 9       pattern = new RegExp(st[i],'g');
10 
11       for(var j=0;j<st[i].length;j++){
12           alt+='*';
13       }
14 
15       str = str.replace(pattern,alt);
16       alt = '';
17   }

    示例:回调函数使用

1 var str = '2016/10/29';
2 var pattern = /(d+)(/)/g;
3 var data = str.replace(pattern,function(result,$1,$2){
4     return $1+'.';
5 });

  * replace方法只会返回原字符被操作后的副本,并不会对原字符串进行改动。

  4.2 match()

    格式:str.match(pattern)
    功能:
      match 在功能上与正则对象自带的方法exec很类似。
      match 根据匹配规则pattern匹配指定的字符串str,如果匹配成功则返回一个数组格式的结果用于存放匹配文本有关的信息,
         如果没有匹配到则返回null。
       var result = str.match(pattern); 
    格式如下:
      result --> 当前的匹配结果。
      result[0] --> 从数组中读取当前的匹配结果。
      result[1]
        .... ---> 指定分组中捕获的内容。
      result[n+1]
      result.index --> 当前匹配结果的首字母在给定字符串中的索引。
      result.input --> 进行匹配操作的给定字符串。

      如果match的匹配规则是一个正则,并且具有全局g属性,那么match返回的匹配结果,便是一个包含所有匹配结果的纯数组。

1 var str = 'abcdabcda';
2 var result = str.match(/a/g);
3 result --> [a,a,a]
4 result.input --> undefined
5 result.index --> undefined

  4.3 split()

    格式:str.split(pattern,length)
    功能:
      根据规则pattern将字符串拆分为数组,拆分后的数组并不包含作为拆分依据的那个参数。
      默认情况下是空字符进行拆分,也就是每个任意的字符作为一个数组元素。
      pattern参数,可以是正则表达式,也可以是单纯的字符或字符串。
      length参数,用于设置拆分数组后数组最大的长度(即数组元素的个数)。缺省该项,表示将字符全部拆分为数组。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读