JavaScript之RegExp对象

CodeStellarHorizon
• 阅读 945

JavaScript之RegExp对象

2016-09-03于坝上草原

语法

**​
**

var expression = / pattern / flags

pattern: 模式部分,正则表达式  

flag: 标志,标明正则表达式匹配行为,可以同时写多种模式exp = /(\w)st/igw

三种模式:

* g: global, 表示全局模式。模式将被应用于所有的字符串

* i:ignoreCase, 表示不区分大小写模式。忽略模式与字符串的大小写

* m: multiline, 表示多行模式。到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项

```

var pattern1 = /[bc]at/i;

var pattern2 = new RegExp('[bc]at', 'i');

```

实例属性

* global: boolean值,表示是否设置g标志

* ignoreCase: boolean值,表示是否设置i标志

* multiline: boolean值,表示是否设置m标志

* lastIndex: int值,表示开始搜索下一个匹配项的字符位置,从0开始

* source: string值,正则表达式的字符串表示

补充:

RegExp实例继承的toLocaleString()和toString()方法都会返回正则表达式的字面量。

实例方法

* .exec()

接受一个要匹配的字符串,返回一个Array形式的匹配结果或null

```

var text = 'mom and dad and baby';

var pattern = /mom( and dad( and baby) ?)?/gi;

var matches = pattern.exec(text);

console.log(matches);

// result Array形式

[

    0: "mom and dad and baby", 

    1: " and dad and baby",

    2: " and baby",

    index: 0, 

    input: "mom and dad and baby",

    length: 3

]

```

注:

在不设置g全局标志的情况下,在同一个字符串上多次调用exec()将始终返回第一个匹配项的信息,在设置全局标志的情况下,每次调用exec()则会在字符串中继续查找新的匹配项。

* .test()

接受一个要匹配的字符串,模式与该字符串匹配返回true,否返回false

```

var text = '000-000-0000';

var pattern = /\d{3}-\d{3}-\d{4}/;

if (pattern.exec(text)) {

  alert('匹配');

}

```

* .compile()

可以改变检索模式,也可以添加或删除第二个参数: .compile( pattern [, flags ] )

```

var text = 'test best BEST';

var pattern = /test/

var result = pattern.exec(text);

console.log(result);

pattern.compile('best', 'ig');

var result = pattern.exec(text);

console.log(result);

var result = pattern.exec(text);

console.log(result);

// 结果

["test", index: 0, input: "test best BEST"]

["best", index: 5, input: "test best BEST"]

["BEST", index: 10, input: "test best BEST"]

```

构造函数属性

构造函数属性适用于作用域中所有正则表达式,并且基于所执行的最近一次正则表达式操作而变化。

* input: 最近一次要匹配的字符串,Opera未实现此属性

* leftContext: input字符串中lastMatch之前的文本

* rightContext: input字符串中lastMatch之后的文本 

* lastMatch: 最近一次的匹配项, Opera未实现此属性

* lastParen: 最近一次匹配的捕获组, Opera未实现此属性

* multiline: bollean值,表示是否所有表达式都使用多行模式。IE和Opera未实现

* RegExp.$1, RegExp.$2, RegExp.$3,... RegExp.$9: 返回在模式匹配期间找到的,所存储的最近的九个部分。只读

```

var text = 'this has been a short summer';

var pattern = /(.)hort/g;

var result = pattern.exec(text);

console.log('input->', RegExp.input);

console.log('leftContext->', RegExp.leftContext);

console.log('rightContext->', RegExp.rightContext);

console.log('lastMatch->', RegExp.lastMatch);

console.log('lastParen->', RegExp.lastParen);

console.log('multiline->', RegExp.multiline);

// 结果,基于chrome浏览器

input-> this has been a short summer 

leftContext-> this has been a

rightContext->  summer

lastMatch-> short

lastParen-> s

multiline-> undefined   // 没有该属性

```

```

// RegExp.$1...RegExp.$9: 每当产生一个带括号的成功匹配时,$1...$9 属性的值就被修改。可以在一个正则表达式模式中指定任意多个带括号的子匹配,但只能存储最新的九个。

var re = /(\w+)@(\w+)\.(\w+)/g

var src = "Please send mail to george@contoso.com and someone@example.com. Thanks!"

result = re.exec(src);

console.log(RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6, RegExp.$7, RegExp.$8, RegExp.$9)

// 结果

george contoso com 

```

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
待兔 待兔
11个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
徐小夕 徐小夕
4年前
Canvas入门实战之用javascript面向对象实现一个图形验证码
本文主要介绍用canvas实现图形验证码的一些思路以及如何用javascript面向对象的方式更友好的实现canvas的功能,关于canvas的一些基本使用方法和API我整理了一个思维导图,大家感兴趣的可以参考学习。(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b158fad95
Wesley13 Wesley13
3年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Stella981 Stella981
3年前
JavaScript的 基本数据类型
第一:Javascript对象是第二:Javascript中第三:Javascript的对象是数据;第四:JavaScript中的对象可以简单理解成"名称:值"对(name:value)。名称(name):"名称"部分是一个JavaScript字符串参考https://www
Wesley13 Wesley13
3年前
PHP 四天相爱相杀
请允许我深深地感慨一声,哇~~~~~!一、第一印象    于工作之因,被迫使用PHP,遂研究之~,花了两天学习安装部署语法运行,花了两天看论坛和商城的源码,总的来说,PHP挺好的;感觉语法使用上比JavaScript还简单,WEB开发上函数库提供的功能比Python还强大,(说的我好像对JavaScript和Py
Stella981 Stella981
3年前
JavaScript基础2
普通的JavaScript对象是命名值的无序集合,JavaScript同样定义了一种特殊的对象数组array,表示带编号的值的有序集合,JavaScript为数组定义了专用的语法,使得数组具有区别于普通对象而独有的行为特性JavaScript还定义了另一种特殊对象函数,函数是具有与它相关联的可执行代码的对象,通过调用函数来运行可执行代码并返回运算结
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(