一,标志

  g (global,全局匹配标志)

    执行正则表达式匹配或替换时,一般只要搜索到一个符合的文本就停止匹配或替换。使用该标志将搜索所有符合的文本直到文本末尾。

  i (ignoreCase,忽略大小写标志)

    执行正则表达式匹配或替换时,使用该标志可以忽略大小写。

  m (multiline,多行匹配标志)

    执行正则表达式匹配或替换时,使用该标志可以让元字符"^"和"$"额外匹配每行的开始位置和结束位置。

二,正则表达式对象

  RegExp对象,就是我们常说的正则表达式对象。该对象主要包含正则表达式模式,以使用正则表达式进行匹配或替换。

    var phone = "18800880001";
// 用法一:充当构造函数使用,用于结合new关键字构造一个新的RegExp对象。
var phoneRegExp = new RegExp("\^1\\d{10}\$","i"); // 加标志符的写法
var phoneRegExp = new RegExp("\^1\\d{10}\$","gim"); // 多个标志符的写法
var phoneRegExp = new RegExp(/^1\d{10}$/); // 不加标志符的写法
var result = phoneRegExp.exec(phone);
console.log(result)    // 用法二:当作普通函数使用,其行为与用法一(使用new关键字)完全一致,相当于用法一省略了new关键字。
var phoneRegExp2 = RegExp("\^1\\d{10}\$","i"); // 加标志符的写法
var phoneRegExp2 = RegExp(/^1\d{10}$/); // 不加标志符的写法
var result2 = phoneRegExp2.exec(phone);
console.log(result2)    // 用法三:JS还支持以字面值形式创建RegExp对象,其用法如下
var phoneRegExp3 = /^1\d{10}$/i; // 加标志符的写法
var phoneRegExp3 = /^1\d{10}$/; // 不加标志符的写法
var result3 = phoneRegExp3.exec(phone);
console.log(result3)

三,exec()函数

  exec()方法的返回值为Array类型,如果找到了对应的匹配,则返回数组的成员如下:

  • 索引0:存放第一个匹配的子字符串。
  • 属性index:匹配文本在字符串中的起始索引位置。
  • 属性input:整个字符串对象(stringObject)。

  exec()函数如果没有查找到任何匹配,则返回null

  

  值得注意的是,每次执行exec()函数都只查找最多一个匹配并返回

  如果为正则表达式设置了全局标志(g),exec()函数仍然只返回最多一个匹配,不过我们再次调用该对象的exec()函数就可以查找并返回下一个匹配。

  其原因是:如果regExpObject带有全局标志gexec()函数不是从字符串的开头开始查找,而是从属性regExpObject.lastIndex所指定的索引处开始查找。该属性值默认为0,所以第一次仍然是从字符串的开头查找。当找到一个匹 配时,exec()函数会将regExpObject.lastIndex的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。当再次执行exec()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。

    var str = "abc12456def45646ghi";

    // 带全局标志g
regExp = /[a-z]+/g;
// 第一次查找前,regExp.lastIndex默认为0
console.log("lastIndex=" + regExp.lastIndex + "<br>"); // lastIndex=0
// 使用exec()进行循环查找匹配
while(array = regExp.exec(str)) {
console.log("lastIndex=" + regExp.lastIndex + "<br>");
console.log(array);
}

  结果:

  

四,test()函数

  test()函数返回一个布尔值,用于指示在所搜索的字符串中是否存在正则表达式模式对应的匹配。

    var str = "abc12456def45646ghi";
var regExp = /\d+/;
console.log(regExp.test(str)); // true

五,compile()函数

  compile()函数用于更改正则表达式模式,并将正则表达式模式编译为内部格式,从而执行得更快。

    var str = "abc12456def45646ghi";

    // 更改regExp的正则表达式模式,并进行编译
// 这与下列语句的作用是相同的:regExp = /\d+/;
regExp.compile("\\d+");
console.log(regExp.exec(str));

  结果:

  

六,$1...$9属性

  RegExp.$1...$9属性用于返回正则表达式模式中某个子表达式匹配的文本。正则表达式中每个小括号内的部分表达式就是一个子表达式。

  注意:这里的RegExp是全局对象,RegExp.$1...$9是全局属性。当执行任意正则表达式匹配操作时,JavaScript会自动更新全局对象RegExp上的全局属性,用以存储此次正则表达式模式的匹配结果。当再次执行正则表达式匹配时,RegExp上的全局属性又会更新,覆盖掉之前的存储数据,以反映本次正则表达式模式的匹配结果。

    var str = "X98Y87Z65";
// 三个数字部分加了小括号,表示子表达式
var reg = /^X(\d+)Y(\d+)Z(\d+)$/;
reg.test(str); // 此处使用exec()等其他正则表达式的匹配方法也可
console.log(RegExp.$1); //
console.log(RegExp.$2); //
console.log(RegExp.$3); //

http://www.365mini.com/page/tag/javascript-regexp-object

js 正则表达式的使用(标志 RegExp exec() test() compile() $1...$9)的更多相关文章

  1. js正则表达式replace里有变量的解决方法用到RegExp类

    一直比较害怕使用正则表达式,貌似很深奥很复杂的样子,所以在用js操作字符串的时候,我最多使用的是replace.split.substring.indexOf等函数,这些函数有时候需要多次叠加使用,但 ...

  2. js正则表达式中test,exec,match方法的区别说明

    js正则表达式中test,exec,match方法的区别说明 test test 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var ...

  3. JS正则表达式(JavaScript regular expression)

    RegExp直接量和对象的创建 就像字符串和数字一样,程序中每个取值相同的原始类型直接量均表示相同的值,这是显而易见的.程序运行时每次遇到对象直接量(初始化表达式)诸如{}和[]的时候都会创建新对象. ...

  4. [转]精通JS正则表达式

    原文路径:http://www.jb51.net/article/25313.htm 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式 ...

  5. 【正则】精通JS正则表达式,没消化 信息量太大,好文

    http://www.jb51.net/article/25313.htm 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用 ...

  6. (转)精通 JS正则表达式

    精通 JS正则表达式 (精通?标题党 ) 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证  ...

  7. 精通 JS正则表达式(转)

    转载的目的在于:增加一些自己看不懂的解释.内容只加不改,灰色字体是自己寻找并增加的. 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式 ...

  8. JS正则表达式的基础用法

    RegExp(正则表达式)对象 正则表达式是一个描述字符模式的对象,可以处理更复杂的字符串.进行匹配替换. 常用的修饰符: i/m/g 使用方法: [声明方法一: new RegExp(value)] ...

  9. javascript -- js正则表达式

    正则表达式可以:  1.测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证 2.替换文本.可以在文档中使用一个正则 ...

随机推荐

  1. java.lang(StringBuffer)

    public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharS ...

  2. 同一个机器 安装多个版本Chrome浏览器的方法

    1. Chrome 现在安装直接没有任何提示 就直接安装了 而且自动式 高版本覆盖低版本安装 不给你任何选择版本的机会. 2. 但是chrome 的安装是基于用户的 所以 同一个机器 使用不同的用户 ...

  3. 【学亮IT手记】jQuery text()/html()回调函数实例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  4. C# Note5:使用相对路径读取文件

    一.C#中使用相对路径读取配置文件 一般Solution的目录结构如下图所示: (如过看不到某些文件,可以点击 “显示所有文件” 图标) 方法一:由于生成的exe文件在bin\debug目录下,可以使 ...

  5. PHP通过循环给数组赋值

    $userDatas = [ ['user_id'=>1], ['user_id'=>3] ]; $userIds = []; foreach ($userDatas as $item){ ...

  6. codeforces581C

    Developing Skills CodeForces - 581C 你在玩一个游戏.你操作的角色有n个技能,每个技能都有一个等级ai.现在你有k次提升技能的机会(将其中某个技能提升一个等级,可以重 ...

  7. mysql语句-DDL语句

    SQL分类 1.DDL语句:数据定义语句,用来定义不同的数据段.数据库,表,列,索引等数据表对象,常用语句:create.drop.alter等. 2.DML语句:数据操作语句,用于添加.删除.更新和 ...

  8. Keepalived+Haproxy高可用负载均衡群集

    介绍 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会 ...

  9. base64URL处理

    加密 String str="hello world"; String encode= Base64.getUrlEncoder().encodeToString(str.getb ...

  10. pip详解

    pip是一个安装和管理 Python 包的工具.python安装包的工具有easy_install, setuptools, pip,distribute等,pip是Python官方推荐的包管理工具 ...