详解JavaScript RegExp对象


Posted in Javascript onFebruary 04, 2017

什么是 RegExp?

正则表达式描述了字符的模式对象。

当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。

简单的模式可以是一个单独的字符。

更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。

您可以规定字符串中的检索位置,以及要检索的字符类型,等等。

RegExp对象是原生JavaScript中表示正则表达式的对象。

创建对象的方法为:var RegExp = new RegExp(pattern, attributes);

参数pattern指定正则表达式的规则或者表示正则表达式模式的字符串;

参数attributes为可选参数,表示匹配模式的修饰符。包含3个参数:

1.  i:执行对大小写不敏感匹配;

<script text="text/javascript">
var txt = 'Hello World!'

var reg = new RegExp('hello', 'i');

if(reg.test(txt)) {


console.log(txt.match(reg));

}
</script>

2.  g:执行全局匹配(查找所有匹配项而非找到第一个匹配项后停止);

<script text="text/javascript">
  var txt = 'This is just a test.'
  var reg = new RegExp('is', 'g');//区分大小写
  var reg01 = new RegExp('is', 'gi');//不区分大小写
  if(reg.test(txt)) {
    console.log(txt.match(reg));//["is", "is"]
    console.log(txt.match(reg).length);//2
  }
</script>

3.  m:执行多行匹配(若不设置该属性,^($)只与整个被搜索字符串的开始(结尾)位置开始匹配;若设置该属性,^($)还可以与被搜索字符串的“\r”或“\n”之后位置开始匹配)。

<script type="text/javascript">
  //以下代码不能够匹配字符串"an",尽管"an"后面已经换行了,但"an"并不是字符串行的结尾。
  var txt1 = 'This is an\n apple'; 
  var reg1 = /an$/;
  console.log(txt1.match(reg1));//null
  //以下代码能够匹配到字符串"an"
  var txt2 = 'This is an\n apple';
  var reg2 = /an$/m;
  console.log(txt2.match(reg2));//["an", index: 8, input: "This is an↵ apple"]  
  //以下是多行匹配开头示例
  var txt3 = 'This is an\n apple';
  var reg3 = /^\sapp/;
  console.log(txt3.match(reg3));//null
  
  var txt4 = 'This is an\n apple';
  var reg4 = /^\sapp/m;// /^ app/m
  console.log(txt4.match(reg4));//[" app", index: 11, input: "This is an↵ apple"]
</script>

i,g,m三个修饰符可以相互组合同时使用。

以上m修饰符中的示例中var reg4 = /^\sapp/的"\"是一个转义字符,如果使用构造函数创建RegExp对象时,应将正则表达式中的"\"用"\\"进行代替:

<script type="text/javascript">
  var txt4 = 'This is an\n apple';
  var reg4 = new RegExp('^\\sapp', 'm');
  console.log(txt4.match(reg4));//[" app", index: 11, input: "This is an↵ apple"]
</script>

RegExp对象属性

1.global

返回正则表达式是否具有"g"修饰符;

<script type="text/javascript">
  var txt = 'This is just a test';
  var reg = new RegExp('st', 'g');
  if(reg.global) {
    console.log(txt.match(reg));//["st", "st"]
  }
</script>

2.ignoreCase

返回正则表达式是否具有"i"修饰符;

3.multiline

返回正则表达式是否具有"m"修饰符;

4.lastIndex

标记下一次匹配开始时所在字符串的位置;

<script type="text/javascript">
  var txt = 'If you love code, you should code everyday.';
  var reg = new RegExp('ou', 'g');
  var length = txt.match(reg).length;
  for(var i = 0; i < length; i++) {
    reg.test(txt);
    console.log(reg.lastIndex);
  }
</script>

5.source

返回正则表达式进行模式匹配的文本或表达式,返回的文本中不包括修饰符"i","g","m",也不包括正则表达式直接量使用的定界符

<script>
  var reg1 = new RegExp('yoho', 'm');
  var reg2 = new RegExp('\\w');
  var reg3 = /\w/m;
  console.log(reg1.source);//yoho
  console.log(reg2.source);//\w
  console.log(reg3.source);//\w
</script>

RegExp对象方法

1.compile

改变或重新编译正则表达式(Opera浏览器不支持该方法)

对于正则表达式的重新定义,以下方法就可以实现,所以对于此方法的应用场景,我也不是很清楚

<script>
  var reg = new RegExp('ou', 'g');
  reg = /\w/;
</script>

2.exec

检索字符串中正则表达式的匹配结果

<script>
  var txt = 'If you love code, you should code everyday.';
  var reg = new RegExp('ou', 'g');
  var length = txt.match(reg).length;
  for(var i = 0; i < length; i++) {
    console.log(reg.exec(txt));
  }
</script>

3.test

检测字符串是否与匹配正则表达式匹配

<script>
  var txt = 'I code everyday.';
  var reg = new RegExp('code');
  console.log(reg.test(txt));//true
</script>

以上所述是小编给大家介绍的JavaScript RegExp对象,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
toString()一个会自动调用的方法
Feb 08 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
Sep 28 Javascript
js判断两个日期是否相等的方法
Sep 10 Javascript
JavaScript函数详解
Feb 27 Javascript
JavaScript获取网页表单action属性的方法
Apr 02 Javascript
js定义类的几种方法(推荐)
Jun 08 Javascript
JS实现DOM删除节点操作示例
Apr 04 Javascript
vue项目base64字符串转图片的实现代码
Jul 13 Javascript
小程序点击图片实现自动播放视频
May 29 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
Nov 10 Javascript
jQuery实现的上拉刷新功能组件示例
May 01 jQuery
浅谈javascript如何获取文件后缀名
Aug 07 Javascript
JS查找字符串中出现最多的字符及个数统计
Feb 04 #Javascript
JavaScript获取中英文混合字符串长度的方法示例
Feb 04 #Javascript
纯js模仿windows系统日历
Feb 04 #Javascript
canvas的神奇用法
Feb 03 #Javascript
Jquery实现跨域异步上传文件总结
Feb 03 #Javascript
js 递归和定时器的实例解析
Feb 03 #Javascript
js实现文本上下来回滚动
Feb 03 #Javascript
You might like
yii2缓存Caching基本用法示例
2016/07/18 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
jQuery timers计时器简单应用说明
2010/10/28 Javascript
Jquery中删除元素的实现代码
2011/12/29 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
PyQt5每天必学之关闭窗口
2018/04/19 Python
Python实现ping指定IP的示例
2018/06/04 Python
python中import与from方法总结(推荐)
2019/03/21 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
Python如何生成xml文件
2020/06/04 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
存储过程和函数的区别
2013/05/28 面试题
自动化专业毕业生自荐信
2013/11/01 职场文书
2014年清明节寄语
2014/04/03 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
工作失误检讨书范文
2015/01/26 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL
Javascript webpack动态import
2022/04/19 Javascript