JavaScript(JS)中与正则表达式有关的方法介绍
文章目录
- RegExp
- RegExp 对象的属性
- compile
- test
- exec
- String
一共有 7 个与正则表达式式相关的方法,这些方法分别来自于 RegExp 与 String 对象。
RegExp
RegExp 对象表示正则表达式, 主要用于对字符串执行模式匹配.
语法: new RegExp(pattern[, flags])
参数 pattern
是一个字符串, 指定了正则表达式字符串或其他的正则表达式对象。
参数 flags
是一个可选的字符串,包含属性 g
、i
和 m
,分别用于指定全局匹配、区分大小写的匹配和多行匹配。如果 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()
的行为就稍微复杂一些。它会在 RegExpObject
的 lastIndex
属性指定的字符处开始检索字符串 string
。当 exec()
找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject
的 lastIndex
属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 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)中与正则表达式有关的方法介绍相关推荐
- JavaScript -- 时光流逝(三):js中的 String 对象的方法
JavaScript -- 知识点回顾篇(三):js中的 String 对象的方法 (1) anchor(): 创建 HTML 锚. <script type="text/javasc ...
- 前端开发:JS中关于正则表达式的使用汇总
前言 在前端开发过程中,关于正则表达式的使用也是必备技能,尤其是在实际业务需求的时候,需要处理一些不能按照正常语句操作的逻辑,如前端开发中的字符匹配.参数处理等都需要正则表达式来匹配截取处理.虽然正则 ...
- js中修改this的指向方法整理
JavaScript(简称"JS") 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言.虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,Ja ...
- JS中与正则相关的方法
前面有一篇文章大体介绍了一下JS中正则表达式,而使用正则表达式还需要配合JS中的相关方法,分别是String对象和RegExp对象的方法.今天就来具体介绍一下这些方法. 使用这则表达式的方法可以分为两 ...
- js中的正则表达式(2)
前言 紧接着上次的js中的正则表达式(1),这一文搁在那很久了的,本文为初学者学习笔记心得,适用我这种小白,并不是什么高大尚的内容,您将在本文中看到,如何实现重复字符匹配,子表达式的使用,嵌套以及re ...
- php js unescape,PHP实现JS中escape与unescape的方法
本文实例讲述了PHP实现JS中escape与unescape的方法.分享给大家供大家参考,具体如下: JavaScript中的escape和unescape是吧字符串转换为unicode十六进制编码, ...
- js中取得变量绝对值的方法
本文实例讲述了js中取得变量绝对值的方法.分享给大家供大家参考.具体分析如下: 绝对值在js中我们直接使用abs函数来求,这里就来整理一些关于js中取得变量的绝对值的方法,以便让大家更深入的理解js绝 ...
- html js脚本限制 正则,简单谈谈JS中的正则表达式
1.正则表达式包括两部分 ①定义正则表达式的规则: ②正则表达式的模式(i/g/m): 2.声明正则表达式 ① 字面量声明: var reg = /表达式规则/表达式模式: eg:var reg = ...
- JS中的call()和apply()方法(转)
转自:http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类: JS 1.方法定义 call方法: 语法:call([thisObj ...
最新文章
- 在不允许新建对象的条件下,将list中指定条件的值去除
- SAP RETAIL MM42进入商品的销售视图系统提示: No basic purchase price relevant to pricing found with schema RM0000
- 样式表(CSS:Cascading Style Sheets)简要教程[上]
- php文件下载脚本,PHP文件下载实例代码浅析
- Java 应用线上问题排查思路、常用工具小结
- shell 循环 read line
- myeclispe快捷键一\(≧▽≦)/终于也收藏了
- 你们关心十三香不香,我却关心背后的质检稳不稳
- vue-cli安装和使用
- java与数据库的数据交互,Java与数据库初步交互(后续需要进行优化)
- 大规模数据作成时的注意点。
- 使用Sigar做后台服务器管理时,遇到的linux上的问题
- PHP通过SMTP实现发送邮件_包括附件
- Padavan 老毛子路由器登录SSH教程
- Oracle排序查询语句
- 看书和写书,简单而复杂的反思-读书分享会感悟
- chrome常用插件-前端-后端-产品 集合推荐
- c语言中如何识别空格键,在C++中如何判断“空格”键输入?
- html选项卡出现乱码,html乱码
- 一些国外的MD5破解网站
热门文章
- java ee的小程序_Java EE调度程序
- hibernate查询缓存_在Hibernate中启用实体和查询缓存
- maven junit测试_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开
- 游戏 服务器 微服务_整体服务器与微服务
- zz测试接口_使用FizzBu​​zz和JUnitParams进行单元测试
- 没有Javax的Jakarta EE:这次世界也不会结束
- java整数的因式分解_如何在Java中找到整数的质数-因式分解
- javafx中的tree_JavaFX中的塔防
- OpenHub框架进行的异步通信
- 在javafx中界面主题_最小的JavaFX演示文稿(在JavaFX中)