js引用类型之RegExp类型-new RegExp()
引 用 类 型
定义:引用类型是一种数据结构,用于将数据和功能组织在一起,引用类型有时候也被称为对象定义
RegExp 类型
标志flag的含义:
g :表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止;
i :表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写;
m :表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。
- RegExp实例的创建
1. 字面量形式:
var expression = / pattern / flags ;
返回:RegExp实例(对象)
规则:没有正则含义的元字符都必须转义。正则表达式中的元字符包括: ( [ { \ ^ $ | ) ? * + .]}
var pattern1 = /[bc]at/i; // 匹配第一个"bat"或"cat",不区分大小写,这里的元字符是有特殊含义,表示其中可以匹配其中任意的字符
var pattern2 = /\[bc\]at/i; // 匹配第一个" [bc]at",不区分大小写
var pattern3 = /.at/gi; // 匹配所有以"at"结尾的 3 个字符的组合,不区分大小写
var pattern4 = /\.at/gi; // 匹配所有".at",不区分大小写
2. 构造函数:
var expression = new RegExp("pattern ", "flags") ;
入参:两个字符串参数
返回:返回一个RegExp实例(对象)。
var pattern2 = new RegExp("[bc]at", "i");
规则:没有正则含义的元字符(或组合字符)要对字符进行双重转义。
// 字面量模式与等价的字符串
var pattern1 = /\[bc\]at/; // 等价于 var pattern1 = new RegExp("\\[bc\\]at", "i");
var pattern2 = /\.at/i; // 等价于 var pattern2 = new RegExp("\\.at", "i");
var pattern3 = /name\/age/; // 等价于 var pattern3 = new RegExp("name\\/age", "i");
var pattern4 = /\d.\d{1,2}/; // 等价于 var pattern4 = new RegExp("\\d.\\d{1,2}", "i");
var pattern5= /\w\\hello\\123/; // 等价于 var pattern5 = new RegExp("\\w\\\\hello\\\\123", "i");
- RegExp实例的属性
global :返回布尔值,是否设置了 g 标志。
ignoreCase :返回布尔值,是否设置了 i 标志。
lastIndex :返回整数,开始搜索下一个匹配项的字符位置,从 0 算起。
multiline :返回布尔值,是否设置了 m 标志。
source :返回正则表达式的字符串,按照字面量形式而非传入构造函数中的字符串模式返回。
var pattern1 = /\[bc\]at/i;
alert(pattern1.global); // false,表示没有设置 g 标志
alert(pattern1.ignoreCase); // true,表示没有设置 i 标志
alert(pattern1.multiline); // false,表示没有设置 m 标志
alert(pattern1.lastIndex); // 0,表示开始搜索下一个匹配项的字符位置
alert(pattern1.source); // "\[bc\]at",表示正则表达式的字符串表示var pattern2 = new RegExp("\\[bc\\]at", "i");
alert(pattern2.global); // false,表示没有设置 g 标志
alert(pattern2.ignoreCase); // true,表示没有设置 i 标志
alert(pattern2.multiline); // false,表示没有设置 m 标志
alert(pattern2.lastIndex); // 0,表示没有设置 g 标志
alert(pattern2.source); // "\[bc\]at",表示正则表达式的字符串表示
- RegExp实例方法
1. exec() 方法:
pattern.exec(string);
入参:一个字符串
返回:返回数组,将字符串中匹配正则表达式的结果放到数组中
var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;
var matches = pattern.exec(text); // matches为 ["mom and dad and baby", " and dad and baby", " and baby", index: 0, input: "mom and dad and baby", groups: undefined]
alert(matches.index); // 0
alert(matches.input); // "mom and dad and baby"
alert(matches[0]); // "mom and dad and baby"
alert(matches[1]); // " and dad and baby"
alert(matches[2]); // " and baby"
规则:对于 exec() 方法而言,
在模式中设置了全局标志( g ),它每次也只会返回一个匹配项,多次调用exec() ,每次调用则都会在字符串中继续查找新匹配项;
var text = "cat, bat, sat, fat";
var pattern2 = /.at/g;
var matches = pattern2.exec(text); // 返回数组 ["cat", index: 0, input: "cat, bat, sat, fat", groups: undefined]
alert(matches.index); // 0
alert(matches[0]); // cat
alert(pattern2.lastIndex); // 3matches = pattern2.exec(text); // 返回数组 ["bat", index: 5, input: "cat, bat, sat, fat", groups: undefined]
alert(matches.index); // 5
alert(matches[0]); // bat
alert(pattern2.lastIndex); // 8
在不设置全局标志的情况下,在同一个字符串上多次调用 exec() 将始终返回第一个匹配项的信息。
var text = "cat, bat, sat, fat";
var pattern1 = /.at/;
var matches = pattern1.exec(text); // 返回数组 ["cat", index: 0, input: "cat, bat, sat, fat", groups: undefined]
alert(matches.index); // 0
alert(matches[0]); // cat
alert(pattern1.lastIndex); // 0matches = pattern1.exec(text);
alert(matches.index); // 0
alert(matches[0]); // cat
alert(pattern1.lastIndex); // 0
2. test() 方法
pattern.test(string)
入参:一个字符串
返回:布尔值,检测字符串是否匹配正则表达式
var text = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;
if (pattern.test(text)){alert("The pattern was matched.");
}
注意:
/* 实例属性不会重置,所以在循环中再次调用 test() 方法会失败。* 第一次调用 test() 找到了 "cat" ,第二次调用是从索引为 3 的字符(上一次匹配的末尾)开始的,所以就找不到它。* 测试到字符串末尾,下一次再调用 test() 就又从开头开始。*/
// 字面量实例
var re1 = /cat/g;
for (var i=0; i < 10; i++){console.log(re1.test("catastrophe")); // 结果为 true false true false...
}var re2 = null;
for (var i=0; i < 10; i++){re2 = /cat/g;console.log(re2.test("catastrophe")); // 结果为 true true true true...
}// 构造函数实例同理
3. toLocaleString() 和 toString():
pattern.toLocaleString() / pattern.toString()
返回:返回正则表达式的字面量,与创建正则表达式的方式无关
var pattern = new RegExp("\\[bc\\]at", "gi");
alert(pattern.toString()); // 返回 /\[bc\]at/gi
alert(pattern.toLocaleString()); // 返回 /\[bc\]at/gi
- RegExp构造函数属性(类似于静态属性)
长属性:
var text = "this has been a short summer";
var pattern = /(.)hort/g;/*
* 注意:Opera 不支持 input、lastMatch、lastParen 和 multiline 属性
* Internet Explorer 不支持 multiline 属性
*/if (pattern.test(text)) {alert(RegExp.input); // this has been a short summer,返回了原始字符串alert(RegExp.leftContext); // this has been a,返回了单词 short 之前的字符串alert(RegExp.rightContext); // summer,而 rightContext 属性则返回了 short
之后的字符串alert(RegExp.lastMatch); // short,返回最近一次与整个正则表达式匹配的字符串,即 short ;alert(RegExp.lastParen); // s,返回最近一次匹配的捕获组alert(RegExp.multiline); // false
}
长属性简写方式——短属性
var text = "this has been a short summer";
var pattern = /(.)hort/g;/*
* 注意:Opera 不支持 input、lastMatch、lastParen 和 multiline 属性
* Internet Explorer 不支持 multiline 属性
*/if (pattern.test(text)) {alert(RegExp.$_); // this has been a short summeralert(RegExp["$`"]); // this has been aalert(RegExp["$'"]); // summeralert(RegExp["$&"]); // shortalert(RegExp["$+"]); // salert(RegExp["$*"]); // false
}
其他属性:RegExp.$1 、 RegExp.$2 … RegExp.$9 ,分别用于存储第一、第二……第九个匹配的捕获组,在
调用 exec() 或 test() 方法时,这些属性会被自动填充
var text = "this has been a short summer";
var pattern = /(..)or(.)/g;if (pattern.test(text)){alert(RegExp.$1); // shalert(RegExp.$2); // t
}
js引用类型之RegExp类型-new RegExp()相关推荐
- js——引用类型和基本类型
js中的数据类型有以下几种: Number Boolean undefined Object Function String Null 基本类型:Number Boolea ...
- javascript类型系统——正则表达式RegExp类型
原文:javascript类型系统--正则表达式RegExp类型 × 目录 [1]对象 [2]实例属性 [3]静态属性[4]实例方法 前面的话 前面已经介绍过javascript中正则表达式的基础语法 ...
- RegExp类型exec()方法的返回值说明
之前看别人写的插件经常会用到RegExp对象来验证输入,并且获取一些那时我并不晓得是什么东西的数组,来取值进行自定义的逻辑处理.今天学习了一下RegExp类型.终于有了一个初步的了解,至少不会看一会就 ...
- ECMAScript——RegExp类型
ECMAScript通过RegExp类型来支持正则表达式.使用下面类似Perl的语法,就可以创建一个正则表达式. var expression = / pattern/ flags; 其中的模式(pa ...
- 内置对象的API Array数组对象 String字符串对象 json字符串 JSON对象 js作用域及变量预解析 引用类型与值类型区别 共享引用 基本包装类型 数组去重
01-内置对象的API a.Date对象获取时间 b.Array对象数组加工 c.String对象字符串加工 d.json字符串的语法格式 e.JSON对象的字符串与对象转换应用 02-JS作用域 a ...
- JavaScript正则表达式----RegExp类型, 代码说明简单易懂
RegExp 正则表达式定义 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具.匹配原则: 贪婪匹配 直接量语法 /pattern(匹配规则)/attributes(属性) 创建 ...
- js php 数据类型判断,【js基础】变量类型判断
类型判断方法比较: 如果需要想详细了解,请看下文: 注:原封不动复制备份,防止删帖 在JavaScript中,有5种基本数据类型和1种复杂数据类型,基本数据类型有:Undefined, Null, B ...
- js 判断变量是否有值返回bool_基础 |判断 JS 中的变量类型竟然可以如此简单
原标题:基础 |判断 JS 中的变量类型竟然可以如此简单 嗨 这里是IMWEB 一个想为更多的前端人 享知识 助发展 觅福利 有情怀有情调的公众号 欢迎关注转发 让更多的前端技友一起学习发展~ 正文 ...
- 跟小静读CLR via C#(02)-基元类型、引用类型、值类型
跟小静读CLR via C#(02)-基元类型.引用类型.值类型 一. 基元类型 编译器能够直接支持的数据类型叫做基元类型.例如int, string等.基元类型和.NET框架类库FCL存在着直接的映 ...
最新文章
- SaltStack:Salt SSH
- 阿里云CentOS 7.4 配置Nginx、PHP、Mariadb
- 【STM32】FSMC概述
- No Pain No Game HDU - 4630(gcd+线段树+离线处理)
- 6_python基础—循环
- 【Linux】shell调用Java程序main方法通过crontab定时执行
- 科普贴:示波器的组成
- Proteus常用元件对照表(最全)
- 概率论和数理统计知识点总结
- 计算机系统维护课程设计报告,计算机系统维护工程(第2版)
- 书单丨跟着院士学区块链:系统理解区块链技术
- 2021-2022年十类(30+)热门资质证书汇总分享
- 文本标注工具--BRAT 安装
- LeetCode二叉树系列——515.最每个树行中找最大值
- 初学算法——第二天:斐波那契数列
- 中科杯看到的不错的参赛项目,分享给你们
- TTL电平与RS232电平
- 外媒称中国人工智能应用全球领先,杭州是中国人工智能孵化地
- 《数论概论(原书第4版)》一第2章 勾 股 数 组
- Android内存优化(二)系统进程之logd的native memory优化
热门文章
- 计算机网络相关术语概念名词汇总总结集合——摘自《计算机网络--自顶向下》第四章
- 网关技术详解及常见网关对比
- OmniPlan 3破解码
- 计算机word怎么选中全文,word选定全文快捷键是什么
- Android Activity 启动模式详解
- 条形码录入测试软件,条形码产品信息如何录入
- 2019, XII Samara Regional Intercollegiate Programming Contest 解题报告
- word插入mathtype公式行间距变大怎么办?
- python中x、y=y、x_浅谈 (x, y) = (y, x)
- 【数据结构】二叉搜索树的上/下界