详解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 相关文章推荐
利用ASP发送和接收XML数据的处理方法与代码
Nov 13 Javascript
JS对HTML标签select的获取、添加、删除操作
Oct 17 Javascript
在Node.js中使用HTTP上传文件的方法
Jun 23 Javascript
jQuery实现列表内容的动态载入特效
Aug 08 Javascript
对称加密与非对称加密优缺点详解
Feb 06 Javascript
学习使用Bootstrap页面排版样式
May 11 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
Jul 05 Javascript
vue使用一些外部插件及样式的配置代码
Nov 18 Javascript
js实现div色块拖动录制
Jan 16 Javascript
基于ajax及jQuery实现局部刷新过程解析
Sep 12 jQuery
jQuery实现动态加载瀑布流
Sep 01 jQuery
原生Js 实现的简单无缝滚动轮播图的示例代码
May 10 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
php小技巧之过滤ascii控制字符
2014/05/14 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
javascript引导程序
2008/10/26 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
2013/05/05 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
使用node.js搭建服务器
2017/05/20 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
python进程类subprocess的一些操作方法例子
2014/11/22 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
Python解决八皇后问题示例
2018/04/22 Python
python解决字符串倒序输出的问题
2018/06/25 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
30岁生日感言
2014/01/25 职场文书
记帐员岗位责任制
2014/02/08 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
中华魂演讲稿
2014/05/13 职场文书
股份转让协议书范本
2015/01/27 职场文书
体育委员竞选稿
2015/11/21 职场文书
mysql sql常用语句大全
2022/06/21 MySQL