JavaScript的正则表达式类型
创建正则表达式实例
正则表达式字面量var regexpLiteral = pattern gim;RegExp构造函
JavaScript的正则表达式类型
创建正则表达式实例
正则表达式字面量
var regexpLiteral = /pattern/gim;
RegExp构造函数
var regexpInstance = new RegExp( "pattern", "gim");
pattern
表示正则表达式的匹配模式。
匹配模式标记:
g
: 全局模式;i
: 不区分大小写;m
: 多行模式;
RegExp构造函数的匹配模式参数是字符串,其中的元字符需要双重转义(这个问题比较复杂最后讨论,或者避免使用RegExp构造函数创建正则表达式)。
正则表达式对象的属性
global
: 布尔值,表示是否设置了g
标识;
ignoreCase1
: 布尔值,表示是否设置了i
标识;
multiline
: 布尔值,表示是否设置了m
标识;
lastIndex
: 整数值,表示进行下一次匹配时的起始位置;
source
: 表示正则表达式字面量;
console.log( regexpLiteral.global ); // true
console.log( regexpLiteral.ignoreCase); // true
console.log( regexpLiteral.multiline); // true
console.log( regexpLiteral.lastIndex); // 0
console.log( regexpLiteral.source); // 字面量形式
正则表达式对象的方法
exec(string)
: 以待匹配的字符串为参数;
- 找到匹配项时返回数组:
- 第一个元素是string中的第一个匹配项;
- 数组包含两个特殊的属性,index表示匹配项的索引,input表示进行匹配的字符串;
- 没有匹配时返回null;
var letters = /a/g;
console.log( letters.exec( "0a1a2a3a" )); //[ 'a', index: 1, input: '0a1a2a3a' ]
console.log( letters.lastIndex ); // 2
- 全局标识:
- 即使设置了全局标识exec()每次也只返回一个匹配项;
- 设置全局标识时如果对同一个字符串进行多次匹配,将在字符串中查找新的匹配项;
- 注意上下两个例子中的lastIndex属性的变化;
console.log( letters.exec( "0a1a2a3a")); // [ 'a', index: 3, input: '0a1a2a3a' ]
console.log( letters.lastIndex ); // 4
- 如果没有全局标识, exec()对同一个字符串多次匹配,始终返回第一个匹配项,lastIndex始终为0;
- 请自行验证;
test(string)
:字符串参数,找到匹配项时返回true, 否则false;
console.log( letters.test("01234a"));
toString()
toLocaleString()
- 返回返回正则表达式字面量;
console.log( letters.toString());
valueOf()
- 返回返回正则表达式字面量;
console.log( letters.valueOf());