第一部分:新建正则表达式

JavaScript中正则表达式是参照Perl 5(一门历史很悠久的语言,现在tiobe编程语言排行依然在10名左右)建立的。

新建正则表达式的方法两种

1.使用字面量斜杠/开始和结束)  注:字面量:表示固定值的符号。可以简单理解为表示值最简单、最基本的写法。

 var reg1=/test/;
console.log(reg1,typeof reg1);

运行结果:

2.使用RegExp构造函数。

 var reg2=new RegExp('test');
console.log(reg2,typeof reg2);

运行结果:

注意:虽然两者运行结果一致。但是它们还是存在着差别:第一种方法是在编译时(代码载入时)新建正则表达式;而第二种是在运行时(代码执行时)新建正则表达式。

 一般均采用字面量的写法,推荐!

第二部分:RegExp对象的属性和方法

2.1属性

2.1.1:修饰符,返回布尔值

  • ignoreCase:忽略大小写;i;属性只读
  • global:全局匹配;g;属性只读
  • multiline:多行匹配;m;属性只读
 var reg3=/test/ig;
console.log(reg3.ignoreCase,reg3.global,reg3.multiline);

运行结果:

2.1.2 :不是修饰符

  • lastIndex:返回下一次搜索的位置;属性可读写;设置了g修饰符才有意义
  • source:返回正则表达式的字符串形式(不包括反斜杠);属性只读
 var reg3=/test/ig;
console.log(reg3.lastIndex,reg3.source);

运行结果:

2.2方法

2.2.1 test():当前模式是否能匹配参数字符串

如下:'test_test_'参数字符串包含模式test,所以返回true。

 var res1=/test/.test('test_test_');
console.log(res1);//true

正则表达式带有g修饰符:每次进行匹配的位置是上一次匹配成功的位置+1;如果匹配不成功,那么又会从头开始进行匹配

 var res1=/test/.test('test_test_');
console.log(res1);//true var reg4=/a/g;
var s='abcabcabc'; console.log(reg4.lastIndex);//
console.log(reg4.test(s));//true console.log(reg4.lastIndex);//1:上次匹配成功的位置+1
console.log(reg4.test(s));//true console.log(reg4.lastIndex);//
console.log(reg4.test(s));//true console.log(reg4.lastIndex);//
console.log(reg4.test(s));//false //又开始从头进行匹配
console.log(reg4.lastIndex);//
console.log(reg4.test(s));//true

运行结果:

因此,带有g修饰符的正则对象,我们可以通过lastIndex属性进行指定开始匹配的位置

 var reg5=/a/g;
var s1='aaaaab';
reg5.lastIndex=5;
console.log(reg5.test(s1));//false

如果正则模式是一个空字符串,则匹配所有字符串

 console.log(new RegExp('').test('abc'));//true

2.2.2:exec():匹配成功,返回数组;匹配失败,返回null

 var reg6=/ab/;
var s2='abcabcd';
console.log(reg6.exec('cdef'));//匹配不成功,null
console.log(reg6.exec(s2));

运行结果:

所以可以明显看出:exec()返回的数组中还包含着index和input属性。

  • index:模式匹配成功的第一个位置(0开始计数);
  • input:参数字符串

如果正则表达式中包含圆括号(即"组匹配"),返回的数组会包含多个成员;第一个成员是整个匹配成功的结果,第二个成员是圆括号里面匹配成功的结果。以此类推

 var reg7=/_(ab)/;
var s3='_abc_abcd';
console.log(reg7.exec(s3));

运行结果:

第一个成员整个匹配的结果;第二个参数圆括号匹配的结果。

非捕获组:(?:):表示不返回该组匹配的内容;也就是说匹配的结果不计入括号

 var m1='abc'.match(/(.)b(.)/);
var m2='abc'.match(/(?:.)b(?:.)/);
console.log(m1);
console.log(m2);

运行结果:

如果正则表达式加上g修饰符,则可以多次使用exec方法:

 console.log('---');
var reg8=/_(a+)_/g;
var s4='_a_bc_aa_de_a_f';
var res1=reg8.exec(s4);
console.log(res1,res1.index,reg8.lastIndex);// 0 3
var res2=reg8.exec(s4);
console.log(res2,res2.index,reg8.lastIndex);// 5 9
var res3=reg8.exec(s4);
console.log(res3,res3.index,reg8.lastIndex);// 11 14
var res4=reg8.exec(s4);
console.log(res4,reg8.lastIndex);//此处不能读取index,因为为null,读取则报错
var res5=reg8.exec(s4);
console.log(res5,res5.index,reg8.lastIndex);// 0 3

运行结果:

第三部分:字符串对象方法

  • match():返回一个数组;成员是所有匹配的子字符串
  • search():返回一个整数;表示匹配开始的位置
  • replace():按照给定的正则表达式进行替换;返回替换后的字符串
  • split():按照给定规则对字符串进行分割;返回一个数组,包含分割后各个成员

3.1:String.prototype.match():字符串的match()方法与正则对象的exec()方法十分相似:匹配成功返回数组;匹配失败返回null;

区别:当正则表达式带有g修饰符,match()会返回所有结果;而exec()返回一个结果。

 var reg9=/te/;
var s5='teatebtec';
console.log(s5.match(reg9));
console.log(reg9.exec(s5));
var reg10=/te/g;
console.log(s5.match(reg10));
console.log(reg10.exec(s5));

运行结果:

注意:设置lastIndex属性对match()方法无效。

 reg10.lastIndex=2;
console.log(s5.match(reg10),reg10.lastIndex);

运行结果:

可以看出此时reg10.lastIndex依然为0。表明每次match()匹配都是从第一个字符开始的。

3.2 String.prototype.search():返回第一次匹配成功在整个字符串的位置;否则返回-1

同样的,设置lastIndex属性对search()无效;并且search()会忽略g修饰符

 var reg11=/te/;
var s6='te_teabc';
console.log(s6.search(reg11));//
reg11.lastIndex=2;//设置lastIndex属性无效
console.log(s6.search(reg11),reg11.lastIndex);//0 2
var reg12=/te/g;//设置g修饰符无效
console.log(s6.search(reg12));//

运行结果:

3.3 String.prototype.replace():返回替换后的字符串;有两个参数,第一个是搜索模式(正则),第二个是替换的内容

 console.log('abaac'.replace('a','F'));//Fbaac
console.log('abaac'.replace(/a/,'F'));//Fbaac
console.log('abaac'.replace(/a/g,'F'));//FbFFc

运行结果:

3.4 String.prototype.split():按照正则规则切割字符串;返回数组包含切割后的部分

 console.log('a, b,c'.split(','));//["a", " b", "c"]
console.log('a, b,c'.split(/, */));//["a","b","c"]

4.匹配规则

4.1:字面量字符(literal characters):比如:/a/,/cat/

4.2:元字符(meta characters):有特殊含义;不代表字面意思

4.2.1:点字符(.):匹配除回车(\r)、换行(\n)、行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符。

4.2.2:位置字符

  • ^:表示字符串的开始位置
  • $:表示字符串的结束位置

4.2.3:选择字符:竖线符号(|):表示或的关系;比如apple|boy:匹配apple或者boy

4.2.4:转义符:因为有些字符在匹配规则中有着特殊的含义,所以要想匹配它们,得进行转义(在前面加上反斜杠\);比如匹配^,写成\^

需要转义的12个字符:^;.;[;$;(;);|;*;+;?;{和\\

注意:如果使用RegExp生成正则对象转义需要两个反斜杠,因为字符串内部转义需要一次\

 //匹配'+abc'字符串
var reg13=new RegExp('\\+abc');//正确写法
var reg14=new RegExp('\+abc');//错误写法

4.2.5:特殊字符

4.2.6:字符类放置在[]中

1.    ^:放置在[]中首位;如:[^abc]表示除a,b,c之外的字符都能进行匹配;如果[]中没有其它字符,表示匹配一切字符(包括换行符);而.是不包括换行符的。

2.    -:如:[a-z]:匹配a-z这26个字符

4.2.7:预定义模式:

4.2.8:重复类

精确匹配次数:{n}:重复n次;{n,}:至少n次;{n,m}:n到m次

4.2.9:量词符

4.2.10:贪婪模式:(?,*,+)默认情况下,最大可能的匹配;改为非贪婪模式,在量词后面加个?

如:/a+?/:一旦匹配成功,就不会继续匹配下去

 参考:阮一峰JavaScript标准参考教程

JavaScript正则表达式(Regular Expression):RegExp对象的更多相关文章

  1. javascript正则表达式(regular expression)

    一种字符串匹配的模式,用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等.注意:在javascript中正则表达式也是一种对象1:创建正则表达式两种方式:隐式创建( ...

  2. (六)JavaScript之[Regular Expression]与[错误(try, catch, throw)]

    10].正则表达式 /** * 正则表达式(Regular Expression): * * 用于文本搜索和文本替换 * */ /** * /good/i是一个正则表达式. * good是一个模式(用 ...

  3. Java基础-正则表达式(Regular Expression)语法规则简介

    Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...

  4. 正则表达式-Regular expression学习笔记

    正则表达式 正则表达式(Regular expression)是一种符号表示法,被用来识别文本模式. 最近在学习正则表达式,今天整理一下其中的一些知识点 grep - 打印匹配行 grep 是个很强大 ...

  5. 正则表达式(Regular Expression, RegEx)学习入门

    1. 概述 正则表达式(Regular Expression, RegEx)是一种匹配模式,描述的是一串文本的特征. 正如自然语言中高大.坚固等词语抽象出来描述事物特征一样,正则表达式就是字符的高度抽 ...

  6. javascript正则表达式和字符串RegExp

    这篇文章主要介绍了javascript正则表达式和字符串RegExp and String(一)的相关资料,需要的朋友可以参考下     前言     正则表达式是javascript非常重要和常用的 ...

  7. java 正则表达式 -Regular Expression

    正则表达式(Regular Expression),可以说就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式.正则表达式定义了字符串的模式,可以用来搜索.编辑或处理文本,不仅限于某一种语言(P ...

  8. Python正则表达式Regular Expression基本用法

    资料来源:http://blog.csdn.net/whycadi/article/details/2011046   直接从网上资料转载过来,作为自己的参考.这个写的很清楚.先拿来看看. 1.正则表 ...

  9. Python -- 正则表达式 regular expression

    正则表达式(regular expression) 根据其英文翻译,re模块 作用:用来匹配字符串.  在Python中,正则表达式是特殊的字符序列,检查一个字符串是否与某种模式匹配. 设计思想:用一 ...

  10. js,replace() 和 正则表达式(regular expression)

    repalce() 只能替换字符串中的匹配到的第一个字符或者字符串 正则表达式   替换多个字符或者字符串 注意:一些数字型的字符串使用replace() 时要确保是字符串,而不是数字. 转换方法: ...

随机推荐

  1. SSM(Spring+SpringMVC+Mybatis)框架搭建详细教程【附源代码Demo】

    [前言] 应某网络友人邀约,需要一个SSM框架的Demo作为基础学习资料,于是乎,就有了本文.一个从零开始的SSM框架Demo对一个新手来说,是非常重要的,可大大减少在学习过程中遇到的各种各样的坑,说 ...

  2. bug:逆向思维的延伸

    哈哈,我又来了. 前段时间自己出了一个bug,说起来也属于比较常见的类型 A业务需要做一个活动,需要B业务判断,如果是通过A业务跳转至B业务的用户,则在B页面给这类用户展示一个对应的弹窗.(A是新增业 ...

  3. shell 组合新的变量名

    shell 组合新的变量名 普通变量 name=yushuang var=name # 要获取到yushuang res=`eval echo '$'"$var"` echo $r ...

  4. 一个强大的封装好的pdo处理类

    php5.5后就不支持mysql扩展了,也就是说这以后都不能使用msyql_conncet之类的函数了.不过没有关系,pdo比mysql有更多优势,写法也很简单,下面贴出一个来自互联网的pdo处理类. ...

  5. Windows环境下多线程编程原理与应用读书笔记(8)————信号量及其应用

    <一>线程间同步原因 线程间竞争共享资源: 线程间为完成某个任务而协作: 通过互斥量可以实现线程间由于竞争所需要的同步,通过事件可以实现线程间由于协作所需要的同步. 信号量很好地将互斥量和 ...

  6. A. 拼音魔法

    A. 拼音魔法 Time limit per test: 1.0 seconds Time limit all tests: 1.0 seconds Memory limit: 256 megabyt ...

  7. Exclusive-OR(带权并查集)

    Exclusive-OR Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 基于JQuery EasyUI的WebMVC控件封装(含源码)

    JQuery EasyUI类库,大家不会陌生,出来已经有很多年了.个人感觉还是很好用的,作者更新频率也很快,bug也及时修复. 最近在整理以前的代码,找到了这个组件,它是将EasyUI组件封装成MVC ...

  9. margin负值的相关应用

    1.页面上实现css sprite背景定位效果   其实margin:-40px 0 0 -160px;与background-position:-160px -40px;实现的原理是一致的,而差别就 ...

  10. wx:for修改样式

    在获取文字识别数据之后,对数据进行wx:for循环加了边框如图效果: 需求:点击不同边框获取不同文字,再次点击取消选中:选中背景为#999: <view wx:for="{{img_d ...