文章目录

  • RegExp
    • RegExp 对象的属性
  • compile
  • test
  • exec
  • String


一共有 7 个与正则表达式式相关的方法,这些方法分别来自于 RegExp 与 String 对象。

RegExp

RegExp 对象表示正则表达式, 主要用于对字符串执行模式匹配.

语法: new RegExp(pattern[, flags])

参数 pattern 是一个字符串, 指定了正则表达式字符串或其他的正则表达式对象。

参数 flags 是一个可选的字符串,包含属性 gim,分别用于指定全局匹配、区分大小写的匹配和多行匹配。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。

var pattern = "[0-9]";
// 构造正则表达式对象
var reg = new RegExp(pattern,"g");
var reg = new RegExp("[0-9]","g");
// 也可以直接输入字面量
var reg = /[0-9]/g;

RegExp 对象的属性

包含如下属性:

实例属性 描述
global 是否包含全局标志(true/false)
ignoreCase 是否包含区分大小写标志(true/false)
multiline 是否包含多行标志(true/false)
source 返回创建RegExp对象时指定的表达式文本字符串形式
lastIndex 表示原字符串中匹配的字符串最后一个字符后面的位置,默认为0
flags(ES6) 返回正则表达式的修饰符
sticky(ES6) 是否设置了y(粘连)修饰符(true/false)

compile

compile 方法用于在执行过程中改变和重新编译正则表达式。

语法:compile(pattern[, flags])

参数介绍请参考上述 RegExp 构造器,用法如下:

var reg = new RegExp("abc", "gi");
var reg2 = reg.compile("new abc", "g");
console.log(reg); // /new abc/g
console.log(reg2); // undefined

可见 compile 方法会改变原正则表达式对象,并重新编译,而且它的返回值为空。

test

test 方法用于检测一个字符串是否匹配某个正则规则,只要是字符串中含有与正则规则匹配的文本,该方法就返回 true,否则返回 false。

语法:test(string)

用法如下:

console.log(/[0-9]+/.test("abc123")); // true
console.log(/[0-9]+/.test("abc")); // false

以上,字符串”abc123” 包含数字,故 test 方法返回 true;而字符串”abc” 不包含数字,故返回 false。

实际上,如果正则表达式带有全局标志(带有参数 g)时,test 方法还受正则对象的 lastIndex 属性影响,如下:

var reg = /[a-z]+/; // 正则不带全局标志
console.log(reg.test("abc")); // true
console.log(reg.test("de")); // true
var reg = /[a-z]+/g; // 正则带有全局标志g
console.log(reg.test("abc")); // true,成功匹配到字符串 abc
console.log(reg.lastIndex); // 3, 最近 1 次匹配到的字符串最后 1 个字符后面的位置。下次运行 test 时,正则引擎将从索引为 3 的位置开始查找
console.log(reg.test("de")); // false,reg 对象的属性 lastIndex 的值为 3,所以只会从位置 3 开始尝试匹配,而字符串“de”根本就没有位置 3,所以直接匹配失败

exec

语法:exec(string)

exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方法更为复杂。

如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看得出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。

但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObjectlastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObjectlastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0

var reg = /([a-z]+)/gi,string = "World Internet Conference";
var array = reg.exec(string);
console.log(array); // ["World", "World", index: 0, input: "World Internet Conference"]
console.log(RegExp.$1); // World
console.log(reg.lastIndex); // 5, 刚好等于 array.index + array[0].length

如上代码,可以看到 reg.lastIndex == array.index(匹配开始的位置)+ array[0].length(匹配字符串的长度)。

随着检索继续, array.index 的值会变成下个匹配字符串的开始位置, 相应地 reg.lastIndex 的值会变成下个匹配字符串的结束位置。我们也可以通过反复调用 exec 方法来遍历源字符串中所有的匹配字符串,直到 exec 方法再也匹配不到文本时,它将返回 null,并把 reg.lastIndex 属性重置为 0。

array = reg.exec(string);
console.log(array);//["Internet", "Internet", index: 6, input: "World Internet Conference"]
console.log(reg.lastIndex);//14array = reg.exec(string);
console.log(array);//["Conference", "Conference", index: 15, input: "World Internet Conference"]
console.log(reg.lastIndex);//25array = reg.exec(string);
console.log(array);//null
console.log(reg.lastIndex);//0

有的时候我们需要手动将 lastIndex 的值手动设置为 0,如下例子:

var reg = /[0-9]+/g,str1 = "123abc",str2 = "123456";
reg.exec(str1);
console.log(reg.lastIndex);//3
var array = reg.exec(str2);
console.log(array);//["456", index: 3, input: "123456"]

以上代码,正则式在匹配字符串 str2 时,期望的正确结果应该是“123456”,因此建议在第二次执行 exec 方法前,增加一句 reg.lastIndex = 0;

String

match,search,replace,split 方法请参考字符串API。

JavaScript(JS)中与正则表达式有关的方法介绍相关推荐

  1. JavaScript -- 时光流逝(三):js中的 String 对象的方法

    JavaScript -- 知识点回顾篇(三):js中的 String 对象的方法 (1) anchor(): 创建 HTML 锚. <script type="text/javasc ...

  2. 前端开发:JS中关于正则表达式的使用汇总

    前言 在前端开发过程中,关于正则表达式的使用也是必备技能,尤其是在实际业务需求的时候,需要处理一些不能按照正常语句操作的逻辑,如前端开发中的字符匹配.参数处理等都需要正则表达式来匹配截取处理.虽然正则 ...

  3. js中修改this的指向方法整理

    JavaScript(简称"JS") 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言.虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,Ja ...

  4. JS中与正则相关的方法

    前面有一篇文章大体介绍了一下JS中正则表达式,而使用正则表达式还需要配合JS中的相关方法,分别是String对象和RegExp对象的方法.今天就来具体介绍一下这些方法. 使用这则表达式的方法可以分为两 ...

  5. js中的正则表达式(2)

    前言 紧接着上次的js中的正则表达式(1),这一文搁在那很久了的,本文为初学者学习笔记心得,适用我这种小白,并不是什么高大尚的内容,您将在本文中看到,如何实现重复字符匹配,子表达式的使用,嵌套以及re ...

  6. php js unescape,PHP实现JS中escape与unescape的方法

    本文实例讲述了PHP实现JS中escape与unescape的方法.分享给大家供大家参考,具体如下: JavaScript中的escape和unescape是吧字符串转换为unicode十六进制编码, ...

  7. js中取得变量绝对值的方法

    本文实例讲述了js中取得变量绝对值的方法.分享给大家供大家参考.具体分析如下: 绝对值在js中我们直接使用abs函数来求,这里就来整理一些关于js中取得变量的绝对值的方法,以便让大家更深入的理解js绝 ...

  8. html js脚本限制 正则,简单谈谈JS中的正则表达式

    1.正则表达式包括两部分 ①定义正则表达式的规则: ②正则表达式的模式(i/g/m): 2.声明正则表达式 ① 字面量声明: var reg = /表达式规则/表达式模式: eg:var reg = ...

  9. JS中的call()和apply()方法(转)

    转自:http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类: JS 1.方法定义 call方法:  语法:call([thisObj ...

最新文章

  1. 在不允许新建对象的条件下,将list中指定条件的值去除
  2. SAP RETAIL MM42进入商品的销售视图系统提示: No basic purchase price relevant to pricing found with schema RM0000
  3. 样式表(CSS:Cascading Style Sheets)简要教程[上]
  4. php文件下载脚本,PHP文件下载实例代码浅析
  5. Java 应用线上问题排查思路、常用工具小结
  6. shell 循环 read line
  7. myeclispe快捷键一\(≧▽≦)/终于也收藏了
  8. 你们关心十三香不香,我却关心背后的质检稳不稳
  9. vue-cli安装和使用
  10. java与数据库的数据交互,Java与数据库初步交互(后续需要进行优化)
  11. 大规模数据作成时的注意点。
  12. 使用Sigar做后台服务器管理时,遇到的linux上的问题
  13. PHP通过SMTP实现发送邮件_包括附件
  14. Padavan 老毛子路由器登录SSH教程
  15. Oracle排序查询语句
  16. 看书和写书,简单而复杂的反思-读书分享会感悟
  17. chrome常用插件-前端-后端-产品 集合推荐
  18. c语言中如何识别空格键,在C++中如何判断“空格”键输入?
  19. html选项卡出现乱码,html乱码
  20. 一些国外的MD5破解网站

热门文章

  1. java ee的小程序_Java EE调度程序
  2. hibernate查询缓存_在Hibernate中启用实体和查询缓存
  3. maven junit测试_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开
  4. 游戏 服务器 微服务_整体服务器与微服务
  5. zz测试接口_使用FizzBu​​zz和JUnitParams进行单元测试
  6. 没有Javax的Jakarta EE:这次世界也不会结束
  7. java整数的因式分解_如何在Java中找到整数的质数-因式分解
  8. javafx中的tree_JavaFX中的塔防
  9. OpenHub框架进行的异步通信
  10. 在javafx中界面主题_最小的JavaFX演示文稿(在JavaFX中)