JS-RegExp函数

项目中遇到一些的字符串处理场景:

  1. 对整型金额进行千分位格式化,如:1,000
  2. 表单字段校验,如姓名只能是中文且长度范围是[2,4]
  3. 身份证号保留前6后4,中间8位掩码处理。

对于这些都可以使用正则表达式完成。如果你还不知道该怎么用,那有必要学习下正则表达式了。

一、RegExp函数

正则表达式专门用于描述字符串的字符组合格式。我们经常对字符串判断是否匹配指定的正则表达式,以及对匹配的字符进行操作(如替换,转换等)。

1.1 创建正则表达式对象

RegExp用来表示正则表达式。RegExp即是构造函数也是个工厂函数。
创建正则表达式的方式:

// 字面量方式
/pattern/flags

// 构造函数方式
new RegExp(pattern [, flags])

// 工厂函数方式
RegExp(pattern [, flags])

1.2 exec(String)方法

对指定对字符串进行一次正则匹配操作。如果匹配成功则返回一个数组,否则返回null。
返回的数组:

  1. 第一个元素是匹配成功对字符串;
  2. 从第二个元素开始都是匹配的捕获分组字符串;
  3. 该数组被添加了两个额外属性:
    3.1 input

    表示输入原始字符串,即exec方法的实参。

    3.2 index

    表示匹配的字符串在输入参数的下标位置。
// matchs1为["ab", "b", index: 0, input: "abcabc"]
var matchs1 = /a(b)/.exec('abcabc'); // 捕获分组

// matchs2为["ab", index: 0, input: "abcabc"]
var matchs2 = /ab/.exec('abcabc');

1.3 test(String)方法

判断指定的字符串是否匹配正则表达式。

1.4 flags(i,g,m)

控制匹配行为。

1.5 lastIndex属性

表示正则表达式下次执行匹配操作时字符串下标位置。

var r = /a(b)/g;
console.log(r.lastIndex); // 0
r.test('abcabc'); //true, 从字符串下标0开始匹配
console.log(r.lastIndex); // 2
r.test('abcabc'); //true, 从字符串下标2开始匹配
console.log(r.lastIndex); // 5

注意几点:

  1. 只有指定全局匹配m时,lastIndex才有效,否则一直为0;

    var r = /a(b)/; // 没有指定全局m
    console.log(r.lastIndex); // 0
    r.test('abcabc'); //true, 从字符串下标0开始匹配
    console.log(r.lastIndex); // 0
    r.test('abcabc'); //true, 从字符串下标0开始匹配
    console.log(r.lastIndex); // 0
  2. 每次执行全局模式匹配(通过exec或者test方法)时都会影响lastIndex的值。
    注意下例中多次调用会出现匹配失败的情况:

    var r = /a(b)/g;
    console.log(r.lastIndex); // 0
    r.test('abcabc'); //true, 从字符串下标0开始匹配
    console.log(r.lastIndex); // 2
    r.test('abcabc'); //true, 从字符串下标2开始匹配
    console.log(r.lastIndex); // 5
    r.test('abcabc'); //false, 从字符串下标5开始匹配
    console.log(r.lastIndex); // 0,下次 

相关推荐