JS 内置对象之 RegExp
RegExp(正则表达式)对象用于将文本与一个模式匹配。
一、属性
1、source
返回一个值为当前 RegExp 对象的模式文本的字符串,该字符串不会包含正则字面量两边的斜杠以及任何的标志字符。
var regex = /fooBar/ig;
console.log(regex.source); // "fooBar",不包含 /.../ 和 "ig"。
2、flags
- 描述:返回一个字符串,由当前 RegExp 对象的标志组成(以字典序排序从左到右,即"gimuy")。
- 值:g i m u y。
/foo/ig.flags; // "gi"
/bar/myu.flags; // "muy"
Polyfill
if (RegExp.prototype.flags === undefined) {
Object.defineProperty(RegExp.prototype, 'flags', {
configurable: true,
get: function () {
return this.toString().match(/[gimuy]*$/)[0];
}
});
}
3、global
- 描述:RegExp 对象是否具有标志
g
,即全局匹配。 - 值:true / false。
var regex = new RegExp("foo", "g")
console.log(regex.global) // true
4、ignoreCase
- 描述:RegExp 对象是否具有标志
i
,即忽略大小写。 - 值:true / false。
var regex = new RegExp("foo", "i")
console.log(regex.ignoreCase) // true
5、multiline
- 描述:RegExp 对象是否具有标志
m
,即多行输入字符串被视为多行(使用m
,^
和$
将会从只匹配正则字符串的开头或结尾,变为匹配字符串中任一行的开头或结尾)。 - 值:true / false。
var regex = new RegExp("foo", "m")
console.log(regex.multiline) // true
6、unicode
- 描述:RegExp 对象是否具有标志
u
,即任何 Unicode 代码点的转义都会被解释。 - 值:true / false。
var regex = new RegExp('\u{61}', 'u');
console.log(regex.unicode); // true
7、sticky
- 描述:RegExp 对象是否具有标志
y
,即搜索具有粘性。 - 值:true / false。
var regex = new RegExp('foo', 'y');
console.log(regex.sticky); // true
8、lastIndex
描述:lastIndex 用于规定下次匹配的起始位置。
只有使用了表示全局匹配 g
的 RegExp(正则表达式)对象,该属性才会起作用。此时应用下面的规则:
- 如果 lastIndex > 字符串的长度,则
regexp.test
和regexp.exec
将会匹配失败,然后lastIndex
被设为 0。 - 如果 lastIndex = 字符串的长度且该正则表达式匹配空字符串,则该正则表达式匹配从
lastIndex
开始的字符串。 - 如果 lastIndex = 字符串的长度且该正则表达式不匹配空字符串,则该正则表达式不匹配字符串,
lastIndex
被设为 0。 - 否则 lastIndex 被设置为紧随最近一次成功匹配的下一个位置。
var re = /(hi)?/g;
console.log(re.exec("hi")); // ["hi", "hi", index: 0, input: "hi", groups: undefined]
console.log(re.lastIndex); // 2
console.log(re.exec("hi")); // ["", undefined, index: 2, input: "hi", groups: undefined]
console.log(re.lastIndex); // 2
上面代码中,先返回 ["hi", "hi"] ,lastIndex 等于 2。
随后返回 ["", undefined],即一个数组,其第 0 个元素为匹配的字符串。此种情况下为空字符串,是因为 lastIndex 为 2(且一直是 2),"hi" 长度为 2。
二、方法
1、exec
regexObj.exec(str)
功能:用于检索字符串中的正则表达式的匹配。
参数:string
(必须),要检索的字符串。
返回值:返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null
。
示例:
var regex = RegExp('foo*', 'g');
console.log(regex.exec('table football, foosball'));
// ["foo", index: 6, input: "table football, foosball", groups: undefined]
console.log(regex.exec('table fo'));
// null
2、test
regexObj.test(str)
功能:用于检测一个字符串是否匹配某个模式。
参数:string
(必须),要检索的字符串。
返回值:true
/ false
。
示例:
var regex = new RegExp('foo*');
console.log(regex.test('table football')); // true
console.log(regex.test('table fo')); // true
console.log(regex.test('table x')); // false
3、toString
regexObj.toString()
功能:返回一个表示该正则表达式的字符串。
参数:无。
返回值:字符串。
示例:
myExp = new RegExp("a+b+c");
console.log(myExp.toString()); // /a+b+c/
foo = new RegExp("bar", "g");
console.log(foo.toString()); // /bar/g