正则对象与正则表达式的基础学习

正则对象与正则表达式的基础学习

正则表达式是文字匹配的工具,它更像是一个文字模版,只要符合条件的结果都会被筛选出来。

正则表达式在使用上,它依赖于正则对象提供的方法与属性,所以使用正则表达式之前要定义正则对象。

正则表达式的两种使用方式:

1. 定义正则对象

var reg = new RegExp( /regexpression/modified )  //格式一
var reg = new RegExp( ‘regexpression‘ , ‘modified‘ ) //格式二

2. 直接量的方式

var reg = /regExpression/modified

就使用的简便方式上而言,更推荐直接量的方式。

说明一下,modified表示的是正则表达式的修饰符,它用于声明正则表达式的匹配范围与区域,例如全局匹配,多行匹配,不区分大小写等。

常用的修饰符有:i (不区分大小写) 、 g (全局查找) 、 m (多行查找)。

【正则对象的属性】

[ global ] 检查是否有修饰符g(全局查找),返回值为布尔值。
  [ ignoreCase ] 检查是否有修饰符i(忽略大小写),返回值为布尔值。
  [ multiline ] 检查是否有修饰符m(多行查找),返回值为布尔值。
  [ lastIndex ] 返回此次匹配结果之后的第一个字符的索引,也是下次匹配的起始位置。
  [ source ] 返回该正则对象的正则表达式(不返回修饰符)。

【正则对象的方法】

  · exec()

  可以返回匹配到的符合条件的结果,结果是一个数组,数组的第一个元素是结果本身,第二个元素存放的是匹配结果的首字母索引,第三个元素则存放的是整个文本。

  · test()

    根据是否匹配来返回逻辑值。匹配到则为true,否则为false。

【正则对象常用属性与方法的详解】

  [ lastIndex ]

  返回值是一个整数,它表示下次匹配的起始位置,也就是上次匹配之后的第一个字母的索引位置,这个索引值同时又是下一次匹配的起始位置。

  lastIndex属性的值会随着exec(),test()方法的执行而改变,但是正则表达式一定要加g修饰符。

  当exec()与test()方法执行时在也匹配不到符合条件的结果时,就会重置lastIndex属性的值为0。

  示例:

var str = ‘The rain in Spain stays mainly in the plain‘;
var reg = new RegExp(‘ain‘,‘g‘);
reg.exec(str)
reg.lastIndex => 8
reg.exec(str).index =>5
reg.lastIndex => 17
reg.exec(str).index =>14
reg.lastIndex => 28
ret.exec(str).index =>25
reg.lastIndex => 43
ret.exec(str).index =>40
reg.lastIndex => 0

  * 通过返回值比较我们可以发现:
    lastIndex = index+str.length;
    index : 每次匹配到的子串的首字母索引。

  · exec()

    exec()与test()方法每一次执行都只会返回一个匹配结果。

    当正则表达式中有修饰符g,而且匹配的对象中含有多个符合条件的结果,那么想使用exec()与test()返回多个符合条件的结果的话,就需要多次执行该方法:
  示例:

  

var str = ‘The rain in Spain stays mainly in the plain‘;
var reg = new RegExp(/ain/g);
// 第一次执行:
reg.exec(str) => [‘ain‘,index:5,input:‘The rain in Spain stays mainly in the plain‘]
// 第二次执行:
reg.exec(str) => [‘ain‘,index:14,input:‘The rain in Spain stays mainly in the plain‘]
// 第三次执行:
reg.exec(str) => [‘ain‘,index:25,input:‘The rain in Spain stays mainly in the plain‘]

    出现以上的情况的原因,是因为每次匹配的时候,exec(),test()方法都会以reg的lastIndex属性的值作为匹配的起始值。然后不断返回匹配的结果,一直到lastIndex值为0,则结束匹配。

     因此若想一次性的输出所有匹配的结果,便需要借助循环。

  

var str = ‘The rain in Spain stays mainly in the plain‘;
var reg = new RegExp(/ain/g);
for(var i=0;i<str.length;i++){
    console.log(‘你会发现lastIndex值在不断改变‘+reg.lastIndex)
    reg.exec(str);
    if(reg.lastIndex==0){
            break;
     }
 }
--------------------------------------
Resulut:
/*
你会发现lastIndex值在不断改变0
你会发现lastIndex值在不断改变8
你会发现lastIndex值在不断改变17
你会发现lastIndex值在不断改变28
你会发现lastIndex值在不断改变43
*/

  

【总结】 

  总的来说在JS中支持正则语法的方法主要有:

  replace()

  join()

  match()

  search()

  test()

  exec()

  它们的区别就是,replace、join()、match()、search() 会以正则表达式作为参数来匹配文本对象,而test()、exec() 则会以要匹配的文本对象作为参数来使用含有正则表达式的正则对象来进行匹配。

-------------------------------------------------------------------------------------------

学完了JS的正则对象,以及支持正则语法的方法后,下面我主要学习正则语法本身。

正则表达式我们可以简单的将其分为:普通字符、量词、元字符这三类。

· 普通字符

  其中普通字符,就是要直接查找的常量,例如:

  my name is .. 中如果只匹配name,就可以直接写成: /name/

· 量词

  量词则是规定出现或者是匹配的次数。

  例如 020-201023 这串数字,就可以匹配为:/^\d{3}-\d{6}$/

  常用的量词有:

 v.    可以匹配任何单个字符,除了换行与行结束符。  
 v+    可以匹配1次或者是多次
 v?   可以匹配0次或1次。也就是内容可有可无。
 v*   可以匹配0次或多次。
 v{n}    只能匹配出现n次的内容。
 v{n,}   只能匹配至少出现n次的内容。
 v{n,m}    可以匹配出现n次 - m次的内容。
 v$   匹配任何以v作为结束的内容。$也表示正则表达式匹配的结束标志
  ^v   匹配任何以n作为开头的内容。^也表示正则表达式匹配的开始标志。

· 元字符

  所谓的元字符就具有特殊含义的字符。

 \w     匹配26个英文字母,不区分大小写  
 \W   匹配26个英文字母,不区分大小写。 
 \d   匹配0 - 9 的阿拉伯数字字符。
 \D    匹配非数字字符。
 \s   匹配空白字符
 \S   匹配非空白字符。
 \b   匹配单词边界
 \0   匹配 NUL 字符。
 \n   匹配换行符
 \r   匹配回车符
 \f   匹配分页符
 \t   匹配制表符
 \v   垂直制表符
时间: 2024-08-07 05:56:18

正则对象与正则表达式的基础学习的相关文章

Java基础学习总结——Java对象的序列化和反序列化

一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些s

javascript 基础学习整理 二 之 html对象总结,参考W3C

Anchor 对象 更改一个链接的文本.URL 以及 target 使用 focus() 和 blur() 向超链接添加快捷键 Document 对象 使用 document.write() 向输出流写文本 使用 document.write() 向输出流写 HTML 返回当前文档的标题 返回当前文档的 URL 返回当前文档的 referrer 返回下载当前文档的服务器域名 使用 getElementById() 使用 getElementsByName() 打开一个新的文档,添加一些文本,然后

python 基础学习 正则表达式2(使用)

~使用正则表达式   - re模块提供了一个正则表达式引擎的接口,可以让你将REstring编译成对象并用他们来进行匹配. #如果经常使用,建议编译 compile 范例: >>> r1=r'^\d{3,4}-?\d{8}' >>> re.findall(r1,'010-12345678') ['010-12345678'] >>> p_tel=re.compile(r1)   #正则编译,变为对象,利用re模块里的complie方法对r1编译: &g

正则表达式系列第一回--基本概念及正则对象

说起正则表达式,可以说是很多同行的痛点,包括我在内,看了会,会了忘,因此写一个系列的小教程,试图加深一下印象. 基本概念 所谓正则表达式,就是一个用于匹配符合某种规则的字符串的表达式.简单来说,就是我们用表达式的形式来创建一个规则,然后拿着这个规则去不同字符串里面进行匹配,看下有没有匹配上我们规则的字符串. 正则对象 要创建正则对象,有两种方法,一是字面量,二是构造函数. 字面量形式,是我们平时最常用的,它简洁美观,大部分时间我们都在使用它,它的组成为 / 自定义规则 /gim ,首尾两个正斜杠

JavaScript学习第三天(Math对象以及正则表达式)

一:Math(算数)对象的作用是:执行常见的算数任务. 常用的Math方法有: round(a):四舍五入a random():随机数(输出(0,11)之间的随机数 Math.floor(Math.random()*11) ) max(a,b):输出a,b中较大的值 二:JavaScript RegExp 对象(正则表达式) 1.什么是 RegExp? RegExp 是正则表达式的缩写. 当您检索某个文本时,可以使用一种模式来描述要检索的内容.RegExp 就是这种模式. 简单的模式可以是一个单

JavaScript基础学习之-JavaScript权威指南-3.5全局对象

全局对象 全局对象的属性可以直接用. JavaScript解释器启动或是任何web浏览器加载新页面的时候,都会创建新的全局对象,并给它一组定义的初始属性: 构造函数 描述 Date 日期对象 RegExp 正则表达式对象 String 字符串对象 Object object对象 Array 数组对象 全局对象 描述 Math 数学类计算 JSON json 全局函数 描述 decodeURI() 解码某个编码的 URI. decodeURIComponent() 解码一个编码的 URI 组件.

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

JavaScript 基础学习(二)

JavaScript 基础学习(二) instanceof方法: var s = "hello"; var i = 8; //typeof 只能判断基本数据类型 alert(typeof(s)); alert(typeof (i)); //对于引用数据类型,用instanceof var s2=new String("hello2") alert(typeof(s2)); alert(s2 instanceof String);//true var n = new

ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习

首页 头条 文章 频道                         设计频道 Web前端 Python开发 Java技术 Android应用 iOS应用 资源 小组 相亲 频道 首页 头条 文章 小组 相亲 资源 设计 前端 Python Java 安卓 iOS 登录 注册 首页 最新文章 经典回顾 开发 Web前端 Python Android iOS Java C/C++ PHP .NET Ruby Go 设计 UI设计 网页设计 交互设计 用户体验 设计教程 设计职场 极客 IT技术