正则表达式的元字符是包含特殊含义的字符,它们有一些特殊的功能,可以控制匹配模式的方式,反斜杠后的元字符失去其特殊含义。

  • 单个字符和数字

    • .表示匹配除换行符外的单个字符,两个.就表示匹配两个字符

       var pattern1=/g.gle/;
      alert(pattern1.test('gogle'))//true
      alert(pattern1.test('g\ngle'))//换行符false
      alert(pattern1.test('ggle'))//没有匹配false
      var pattern2=/g..gle/;
      alert(pattern2.test('google'))//true
      alert(pattern2.test('gooogle'))//false
    • [a-z0-9A-Z]
      • [a-z] 表示26个小写字母任意一个都匹配

         var pattern1=/[a-z]oogle/;
        alert(pattern1.test('hoogle'))//true
        alert(pattern1.test('google'))//true
      • [A-Z] 表示26个大写字母任意一个都匹配
         var pattern1=/[A-Z]oogle/;
        alert(pattern1.test('Aoogle'))//true
        alert(pattern1.test('google'))//false
      • [0-9] 表示0-9任意一个数字都匹配
          var pattern1=/[0-9]oogle/;
        alert(pattern1.test('000000oogle'))//true
        alert(pattern1.test('google'))//flase
      • [a-zA-Z0-9] 表示匹配任意字母与数字
           var pattern1=/[a-zA-Z0-9]oogle/;
        alert(pattern1.test('0oogle'))//true
        alert(pattern1.test('google'))//true
        alert(pattern1.test('Foogle'))//true

        【结合重复字符使用】表示可以匹配任意多个字符

               var pattern1=/[0-9]*oogle/;
        alert(pattern1.test('oogle'))//true
        alert(pattern1.test('00000google'))//true
    • [^a-z]表示取非,任意非小写字母
       var pattern1=/[^a-z]oogle/;
      alert(pattern1.test('0oogle'))//true
      alert(pattern1.test('google'))//flase
      alert(pattern1.test('Foogle'))//true

      当然也可以是任意非大写字母,非数字,非~

    • \w小写表示匹配字母数字及_
       var pattern1=/[a-zA-Z0-9_]oogle/;//可以被后者取代
      var pattern2=/\woogle/;
      alert(pattern2.test('_oogle'))//true
      alert(pattern2.test('.oogle'))//false
    • \W大写是小写的否定即,表示匹配任意非数字字母下划线
    • \d匹配数字
       var pattern1=/[0-9]oogle/;
      var pattern2=/\doogle/;
      alert(pattern2.test('2oogle'))//true
      alert(pattern2.test('.oogle'))//false
    • \D大写取非咯
  • 空白字符

    • \s表示空白匹配

      var pattern1=/goo\sgle/;
      alert(pattern1.test('goo gle'))//true
  • 锚字符

    • ^[]放在中括号外面哦,表示限制中括号内的内容出现在字符串的开始,
    • []$表示限制中括号的内容,或紧邻其的一个字符需要出现在字符串的结尾
       var pattern1=/^google$/;
      alert(pattern1.test('google'))//true
      var pattern2=/^google/;
      alert(pattern2.test('googleeeeee'))//true
      var pattern3=/google$/;
      alert(pattern3.test('gggggoogle'))//true
      var pattern1=/^google[0-9]$/;
      alert(pattern1.test('google7777'))//false
      alert(pattern1.test('google7'))//true
    • \b表示是否达到边界
       var pattern1=/google\b/;
      alert(pattern1.test('google'))//true
      var pattern1=/google\b/;
      alert(pattern1.test('googlee'))//flase
  • 重复字符
    • *表示匹配0个或任意多个*前面的字符

       var pattern1=/go*gle/;
      alert(pattern1.test('ggle'))//true
      alert(pattern1.test('gogle'))//true
      alert(pattern1.test('gooogle'))//true
    • +表示匹配1个或多个+前面的字符
      var pattern1=/go+gle/;
      alert(pattern1.test('ggle'))//false
      alert(pattern1.test('gogle'))//true
      alert(pattern1.test('gooogle'))//true
    • 表示匹配0个或一个?前面的字符
      var pattern1=/go?gle/;
      alert(pattern1.test('ggle'))//true
      alert(pattern1.test('gogle'))//true
      alert(pattern1.test('gooogle'))//false

      这个是表示对任意字符的重复限制。

      var pattern1=/g.?gle/;
      alert(pattern1.test('ggle'))//true
      alert(pattern1.test('gbgle'))//true
    • {m,n}匹配m~n个包括m与n个
       var pattern1=/go{2,4}gle/;
      alert(pattern1.test('gooooogle'))//false
      alert(pattern1.test('google'))//true

      表示只匹配限定个数个

       var pattern1=/go{2}gle/;
      alert(pattern1.test('gooooogle'))//false
      alert(pattern1.test('google'))//true

      表示至少匹配某个

       var pattern1=/go{2,}gle/;
      alert(pattern1.test('gooooogle'))//true
      alert(pattern1.test('google'))//true
    • ()+匹配至少一个模式
      var pattern1=/(google)+/;//对google这个字符串进行重复匹配
      alert(pattern1.test('googlegooglegoogle'))//true
  • 或字符
    或模式匹配
      var pattern1=/google|baidu|bing/;//或模式匹配
    alert(pattern1.test('this is baidu'))//true
    alert(pattern1.test('soso'))//false
  • 替代字符
      var pattern1=/(.*)\s(.*)/;//替换
    var str='google baidu';
    alert(str.replace(pattern1,'$2 $1'));//baidu google
    var pattern1=/8(.*)8/;//获取88之间的任意字符
    var str='this is 8google8';
    document.write(str.replace(pattern1,'<strong>$1</strong>'))
  • 记录字符
    • 分组

      var pattern1=/(google){2,4}/;//对google这个字符串进行重复匹配
      alert(pattern1.test('googlegooglegoogle'))//true
      alert(pattern1.test('google'))//flase
    • 捕获分组
      var pattern1=/8(.*)8/;//获取88之间的任意字符
      alert(pattern1.test('this is 8google8'))//true
      alert(RegExp.$1);//google表示获取模式中第一个分组对应的匹配的字符串,必须得运行过。

贪婪与惰性

  • 贪婪模式

      var pattern=/8(.*)8/;// 使用了贪婪,匹配到了google8 8google8 8google
    var str='8google8 8google8 8google8';
    document.write(str.replace(pattern,'<strong>$1</strong>'))
  • 惰性模式
      var pattern=/8(.*?)8/g;//惰性模式,全部匹配
    var str='8google8 8google8 8google8';
    document.write(str.replace(pattern,'<strong>$1</strong>'))

    在*后面多加一个?表示取消贪婪模式,进行惰性模式,只进行匹配一个。
    下面这个是没有采用惰性模式,只是将匹配的结果中除去了8

      var pattern=/8([^8]*)8/g;//惰性模式,全部匹配
    var str='8google8 8google8 8google8';
    document.write(str.replace(pattern,'<strong>$1</strong>'))

  • 捕获与非捕获
    未添加分组时:.exec只返回当前位置匹配的字符串

      var pattern=/[a-z]*\s\d{4}/;
    var str='google 2015';
    alert(pattern.exec(str));//google 2015

    添加分组后,该分组内容被捕获,并赋给exec所返回的数组

      var pattern=/([a-z]*)\s(\d{4})/;
    var str='google 2015';
    alert(pattern.exec(str));//google 2015,goole,2015

    非捕获即取消分组被捕获(?:)通过在分组前加上问号与冒号,便可以取消捕获该分组。

      var pattern=/([a-z]*)\s(?:\d{4})/;
    var str='google 2015';
    alert(pattern.exec(str));//google 2015,goole
  • 分组嵌套
    嵌套分组需要~从外往内获取~
      var pattern=/(a?(b?(c?)))/;
    var str='abc';
    alert(pattern.exec(str));//abc,abc,bc,c

    第一步:获得匹配字符串:abc
    第二步:获得第一个分组,即最外层:abc
    第三步:获得第二个分组,bc
    第四步:获得最内层分组c

  • 使用前瞻捕获
      var pattern=/goo(?=gle)/;
    var str='google';
    alert(pattern.exec(str));//goo

    在正则匹配的字符串之后添加一对(),该括号内定义了匹配条件,只有当满足条件时,才可以进行匹配。注意该例子的最后匹配值为goo。

  • 使用特殊字符匹配
      var pattern=/\[/;
    var str='[';
    alert(pattern.test(str));//true

    对于要匹配特殊最的情况,需要在其前加上斜杠,来标识。

  • 换行模式

      var pattern=/\d+/g;
    var str='1、abc\n2、edf';
    alert(str.replace(pattern,'#'));//完全匹配,并替换 var pattern=/^\d+/g;
    var str='1、abc\n2、edf';
    alert(str.replace(pattern,'#'));//匹配第一个 var pattern=/^\d+/gm;
    var str='1、abc\n2、edf';
    alert(str.replace(pattern,'#'));//完全匹配,并替换

    当字符串内出现换行符时,如果我们不进行锚字符的使用,那么会匹配全局,包括换行后的。
    但是,由于使用锚字符,导致即使使用了全局,也没有办法匹配换行后的结果,此时需要开启换行。

JS—正则表达式的更多相关文章

  1. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

  2. 使用外部web组件-----easyUI、jQueryUI、Bootstrap、js正则表达式

    1.使用外部web组件,以Bootstrap为例 <head> <link rel='stylesheet'  href='bootstrap-3.3.0-dist/dist/css ...

  3. js正则表达式图形化工具-rline

    github地址:https://github.com/finance-sh/rline 在线demo: http://lihuazhai.com/demo/test.html 这是一个js正则表达式 ...

  4. Python之路-(js正则表达式、前端页面的模板套用、Django基础)

    js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  5. JS正则表达式大全

    转自:http://wenku.baidu.com/link?url=3y930kC7F6D3wQdMjQ3fVDmiA9Wfebs_QK0UB3N3mFaEoKg4ytZORPopxufeYA6si ...

  6. js正则表达式replace里有变量的解决方法用到RegExp类

    一直比较害怕使用正则表达式,貌似很深奥很复杂的样子,所以在用js操作字符串的时候,我最多使用的是replace.split.substring.indexOf等函数,这些函数有时候需要多次叠加使用,但 ...

  7. JS正则表达式验证账号、手机号、电话和邮箱

    JS正则表达式验证账号.手机号.电话和邮箱 效果体验:http://keleyi.com/keleyi/phtml/jstexiao/15.htm 验证帐号是否合法 验证规则:字母.数字.下划线组成, ...

  8. 初识JS正则表达式

    初识JS正则表达式 看到的使用的正则表达式练习:http://www.cnblogs.com/wenanry/archive/2010/09/06/1819552.html PS:本文参考李炎恢JS笔 ...

  9. 常用JS正则表达式

    常用JS正则表达式 收集一些常用的JavaScript正则表达式匹配规则,比如匹配电话号码.Email.中文字符.身份证号.邮编.QQ号.过滤空白行.匹配特定数字等.觉得这玩意是很有用的,只不过自己水 ...

  10. JS正则表达式大全(整理详细且实用)

    JS正则表达式大全(整理详细且实用).需要的朋友可以过来参考下,希望对大家有所帮助!! 正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释, ...

随机推荐

  1. WebSocket添加事件监听器(6)

    WebSocket编程遵循异步编程模型;打开socket后,只需要等待事件发生,而不需要主动向服务器轮询,所以需要在WebSocket对象中添加回调函数来监听事件. WebSocket对象有三个事件: ...

  2. [洛谷P3834] 【模板】可持久化线段树 1(主席树)

    题目大意:静态区间第K小 题解:主席树 卡点:无 C++ Code: #include <cstdio> #include <algorithm> #define maxn 2 ...

  3. MySQL自增属性auto_increment_increment和auto_increment_offset

    MySQL的系统变量或会话变量auto_increment_increment(自增步长)和auto_increment_offset(自增偏移量)控制着数据表的自增列ID. mysql> sh ...

  4. C++——设计与演化——读书笔记

    <<c++设计与演化>>1.c++的保护模式来自于访问权限许可和转让的概念; 初始化和赋值的区分来自于转让能力的思考; c++的const概念是从读写保护机制中演化出来. 2. ...

  5. [CERC2017]Intrinsic Interval——扫描线+转化思想+线段树

    [CERC2017]Intrinsic Interval https://www.luogu.org/blog/ywycasm/solution-p4747# 这种“好的区间”,见得还是比较多的了. ...

  6. 怎么把linux的磁盘映射到windows上

    步骤如下: 右击如下的computer: 然后选择:Map network drive... 然后在下图按图中所示操作: 最后成功如下图所示:

  7. 基于MapReduce的手机流量统计分析

    1,代码 package mr; import java.io.IOException; import org.apache.commons.lang.StringUtils; import org. ...

  8. C#网络编程基本字段---IPAddress、IPEndPoint

    命名空间: using System.Net; PAddress类提供了对IP地址的转换.处理等功能.其Parse方法可将IP地址字符串转换为IPAddress实例. 如:IPAddress ip = ...

  9. loj6100 「2017 山东二轮集训 Day1」第一题

    传送门:https://loj.ac/problem/6100 [题解] 我们考虑维护从某个端点开始的最长满足条件的长度,如果知道了这个东西显然我们可以用主席树来对每个节点建棵关于右端点的权值线段树, ...

  10. loj6043 「雅礼集训 2017 Day7」蛐蛐国的修墙方案

    传送门:https://loj.ac/problem/6043 [题解] 我们考虑这是个置换,所以一定形成了很多不相交的环. 对于每个环,我们只能选一段.不选.选一段.不选这样交替下去. 显然只有偶环 ...