正则表达式:规定字符串中字符出现规律的公式

如果备选字符列表中个别字符之间是连续的,可用-省略中间的字符。比如:

匹配1位数字:    [0-9]
匹配1位小写字母 : [a-z]
匹配1位大写字母 : [A-Z]
匹配1位字母 :   [a-zA-Z]
匹配1位汉字:        [\u4e00-\u9fa5]

字符集开头,使用^表示除了xx,但除xx外一切字符都行!范围太大了。

预定义字符集: 对常用字符集的简化标识

[0-9] 一位数字     :           \d 
[0-9A-Za-z_] 一位字母,数字或下划线:  \w 
换行,空格,tab 一位空字符 :                \s 
除回车换行外,任意一个字符               .

量词:规定字符集出现次数的规则 用于字符集之后,默认修饰相邻的前一个字符集

有明确数量的量词:

最少m次,最多n次      :{m,n} 
 最少m次,多了不限     : {m,}  
 必须m次          : {m}

没有明确数量的量词:
可有可无,最多1次        ? 
可有可无,多了不限      * 
至少一次,多了不限        +

正则中如果正文和正则保留字冲突,也可用\转义

5. 分组和选择:

选择:或 正则1|正则2 只要满足任意一个正则即可

分组:() ()扩起的子表达式称为一组

数量词放在()之后,则修改一组出现的次数 如:(去){2}

*****分组编号: 正则中每个(),对会自动生成从1开始的编号。如果后边想匹配和前边某个分组完全相同的内容,可用\n匹配。

例子:

(\d{3,2})\1*

\d{15}(\d{2}[0-9Xx])?    // 身份证号

(\+86|0086)?\s*1[34578]\d{9}  //手机号

6. 指定匹配位置:    【前加^,后加$ 从头到尾完整匹配 - 验证】

^ 开始位置的 一般用于正则开头,匹配开始位置的x    以xxx开头的  写在字符集外

$ 结束位置前的x 一般用于正则结尾    以xxx结尾的

例子:

^\s+      // 匹配开头位置的多个空字符

\s+$     // 匹配结尾位置前的多个空字符

^\s+|\s+$  // 匹配开头或结尾的空字符

单词边界: \b 一个单词开头或结尾的空字符,用于区分一个完整的单词;

例子:

no zuo no die nothing
// \bno\b 只匹配前面两个单词“no”,不匹配后面nothing中的no

7. 预判: 提前检查整个字符串是否符合个别要求   (?!)

比如: 密码强度要求: 至少包含一位大写字母 至少包含一位数字  8位字符,必须是字母,数字的组合 [0-9a-zA-Z]{8}

排除法:
1. 判断从开头到结尾不全由小写字母和数字组成
结论: 可能包含大写字母 或 特殊符号

(?![0-9a-z]+$)  //加上$表示强制检查到句末;

2. 判断从开头到结尾不全由字母组成(大写和小写)
结论: 可能包含数字 或 特殊符号

(?![a-zA-Z]+$)

3. 只能由数字和字母组成(排除特殊符号):

(?![0-9a-z]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]{8}

正则API

仅判断是否包含:    var i=str.search(/reg/)

    reg表示一个正则,用//括起来       在str中查找第一个和reg匹配的关键词, 找到返回位置下标,没找到,返回-1     无法设置开始位置

获得所有关键词的内容:   var arr=str.match(/reg/gi);

    【返回的值是一个数组】  如果找全部:第二个/后加g     如果忽略大小写: 第二个/后加i            无法获得每个关键词的位置

替换: 找到str中的和reg匹配的关键词,替换为新内容    str=str.replace(/reg/gi,"替换内容");

     无权修改原字符串,只能返回新字符串    默认也只能替换第一个,加g后才能替换所有

格式化: 将正则表达式匹配的内容,替换为新的格式

    2步: 1. 用正则表达式将要格式化的字符串分组

      2. 在replace的第二个参数中使用$n代替分组匹配的内容,组成新格式。

       用正则将匹配内容分成几组,$1表示第一句内容,$2表示第二组。。。类推;再使用replace将添加的内容加上   

var pid="110102198312262111";
var birth=pid.slice(6,6+8);   // var reg=/(\d{4})(\d{2})(\d{2})/;   //Step1: 使用正则将原字符串分组
         //Step2: 将原字符串,替换为新的格式
birth=birth.replace(reg,"$1年$2月$3日"); //$1=1983 $2=12 $3=26
console.log(birth);        //1983年12月26日

切割: var arr=str.split(/reg/);   将字符串按照正则匹配进行切割,返回数组

即查找关键词内容,又查找关键词位置: 返回数组     var arr=reg.exec(str);

    强调:如果查找全局,reg要加g       arr.index  :发现关键词的位置           arr[0]  :关键词的内容

    执行过程: 从str的开始位置,找下*一个*匹配的关键词 ,将找到的一个关键词放入arr中第1个元素  ,为arr添加index属性,标识当前关键词的位置

    如何使用:只要使用循环反复调用即可 ,exec可自动修改RegExp对象的lastIndex属性,RegExp的lastIndex属性定义了下次开始位置 ,如果没找到,返回null

var html='<link href="css/bootstrap.css"/><a class="curr" href="http://tmooc.cn">go to tmooc</a><a name="top"></a><a href="http://tedu.cn" title="tedu">go to tedu</a><h1>标题1</h1>';
var reg=new RegExp("<a\\s+[^>]*href=[\"|\']([^\'\"]+)[\"|\'][^>]*>.*?</a>","gi")
var arr=null;
while((arr=reg.exec(html))!=null){ //反复调用reg的exec方法,传入参数html,将结果保存到arr中,再判断不等于null
console.log("在位置 "+arr.index +" 发现: "+arr[0]);
}

验证字符串格式   var bool=reg.test(str);

    返回值: 验证通过,返回true,否是返回false    【强调:reg都要前加^,后加$】

    var reg=/^(?![a-z0-9]+$)(?![a-zA-Z]+$)[a-zA-Z0-9]{6,16}$/;

    //反复调用reg的test方法,请用户输入密码直接作为参数,只要验证*不*通过,          就继续循环
while(!reg.test(prompt("输入新密码"))){ alert("密码强度不够!");
}//(循环结束)
alert("密码修改成功");//提示密码修改成功

RegExp对象: 封装一个正则表达式,提供用正则表达式进行验证和查找的方法。

如何创建:

1. 直接量: var reg=/正则/gi;

2. 示例化对象: var reg=new RegExp("正则","gi")

正则API的更多相关文章

  1. java正则API简单解析

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介: java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. ...

  2. 0426JavaSE01day02.txt=========正则、Object、包装类详解

    正则表达式 基本正则表达式:正则表达式简介.分组(). "^"和"$" String正则API:matches方法.split方法.replaceAll方法 O ...

  3. API和正则表达式

    第一章 String & StringBuilderString类用类final修饰,不能被继承,String字符串被创建后永远无法被改变,但字符串引用可以重新赋值,改变引用的指向java字符 ...

  4. JavaScript知识点

    Day 01 1.Javascript 概述 1.什么是Javascript (JS) Javascript 是一种运行于 JS解释器/引擎 中的解释型脚本语言 JS解释器/引擎 :JS运行环境 1. ...

  5. antlr v4 使用指南连载1——简介

    antlr v4简介        antlr是一个强大语言解析工具,可以用于处理结构化文本.二进制文件.说白了,其实可以这么认为,antlr是一个更强大的正则表达式工具.它可以完成更多正则表达式无法 ...

  6. jQuery1.11源码分析(2)-----Sizzle源码中的正则表达式[原创]

    看完了上篇,对Sizzle有了一个大致的了解,我们接下来就可以正式开始啃Sizzle的源码了.上来就讲matcher难度太大,先来点开胃菜,讲讲Sizzle中的各个正则表达式的作用吧(本来还想讲初始化 ...

  7. SSM-CRUD入门项目——删除

    删除 分析 可以进行单个删除,直接点击每条记录后的删除按钮 批量删除,通过勾选checkbox框进行选择删除 单个删除: 通过发送DELETE请求的URL:/emp/{id} 这次我们先从contro ...

  8. SSM-CRUD入门项目——修改与PUT请求

    修改 分析: 点击编辑,弹出用户修改的模态框,    模态框中显示用户的信息,    点击更新完成修改! 第一步先复制添加员工的模态框进行修改调整,完成修改员工的模态框的创建:(当然,相应的生成员工数 ...

  9. SSM-CRUD入门项目——新增与校验

    新增 分析: 在Index.jsp页面点击新增,弹出对话框(模态框) 数据库查询部门列表显示在模态框中 用户输入数据完成操作 我们先把模态框构建出来,并对新增按钮添加事件,点击按钮弹出模态框: < ...

随机推荐

  1. thinkinginjava学习笔记04_初始化与清理

    java沿用了c++的构造器,使用一个和类名完全一样的方法作为类的构造器,可以有多个构造器来通过不同的参数进行构造,称为重载:不仅是构造器可以重载,其他方法也一样通过不同的形参以及不同的返回值来实现重 ...

  2. Python day 7(1) 模块

    一:模块 1 在Python中,一个.py文件就称之为一个模块(Module) 2 Python的好处,优点: a  提高了代码的可维护性 b  当一个模块编写完毕,就可以被其他地方引用.我们在编写程 ...

  3. Sequelize 基本操作

    Sequelize 是 Node 的一个 ORM(Object-Relational Mapping) 框架,用来方便数据库操作. 配置 sequelize 以 mysql 为例 首先我们要引入npm ...

  4. Python 的编码格式

    [前言] Python的编码格式对于初学者来说是很头疼的一件事,不过如果接触的多了,就会发现,只要在恰当的时候使用了恰好的编码,就不会出现太多的问题. [编码介绍] python 的编码格式2.x 和 ...

  5. ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理

    在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行代码就展示了一个基本工作原理.然而,要将这样的解决方案运用到实际生产环境,还有很 ...

  6. [ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected

    1:出现此种错误应该是jar版本包冲突了,启动hive的时候,由于hive依赖hadoop,启动hive,会将hadoop的配置以及jar包等等导入到hive中,导致jar包版本冲突,下面贴一下错误, ...

  7. Android Studio C/C++开发环境配置

    Android Studio C/C++开发环境配置  我的开发环境 : Win 10 + android studio 1.5   一, 安装NDK 开发环境: 1.  Settings -> ...

  8. IO多路复用

    1.事件驱动模型 上一篇写的协程仅仅是切换,本身不能实现并发,什么时候切换也不知道 那么什么时候切回去呢?怎么确定IO操作完了?通过回调函数  对于事件驱动型程序模型,它的流程大致如下: 开始---& ...

  9. vim 简单笔记

    vim编辑器Linux系统常用的一种编辑器  有三种模式   命令模式:插入模式:编辑模式 1 插入模式的基本操作: 从命令模式切入到插入模式只需要注意有三个字母aio就可以了  a是在当前光标后插入 ...

  10. 用JAVA写一个冒泡排序

    一:实现思想: 基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即:每当两相邻的数比较后发现它们的排序与排序要 ...