前言
RegExp:是正则表达式(regular expression)的简写。RegExp 对象用于规定在文本中检索的内容。
创建 RexExp 对象
创建正则表达式有两种方式:
第一种:使用字面量创建 RegExp 对象的语法:
var p = /pattern/attributes;
第二种:使用 new 创建RegExp对象的语法:
var p = new RegExp(pattern, attributes);
参数释义:
- 1.参数pattern是一个字符串,指定了正则表达式的模式或其他正则表达式。
- 2.参数attributes是一个可选的模式字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、不区分大小写的匹配和多行匹配。
attributes参数:
参数 | 描述 |
---|---|
g | 指定全局匹配 |
i | 执行不区分大小写的匹配。 |
m | 多行匹配 |
RegExp对象属性
属性 | 描述 |
---|---|
global | RegExp对象是否具有标志g |
ignoreCase | RegExp对象是否具有标志i |
multiline | RegExp对象是否具有标志m |
lastIndex | 标识开始匹配下一次字符的位置,返回整数 |
source | 正则表达式源文本 |
使用示例
var p = /hello/gi;
console.log(p.global); //true
console.log(p.ignoreCase); //true
console.log(p.multiline); //false
console.log(p.lastIndex); //0
console.log(p.source); //hello
RegExp对象方法
RegExp对象有3个方法:test()、exec()以及compile()。
方法 | 描述 |
---|---|
test() | 检索字符串中的指定值,返回值是true或false |
exec() | 检索字符串中的指定值,返回存有匹配字符串的数组;如果没有发现匹配,则返回null |
compile() | 用于改变正则表达式,compile()既可以改变检索模式,也可以添加或删除第二个参数 |
test()方法
检索字符串中的指定值,返回值是true或false
var x = 'hello world!'
var y = 'my name is yo yo'
var p = /hello/;
console.log(p.test(x)); //true
console.log(p.test(y)); //false
exec()方法
检索字符串中的指定值,返回值是存有匹配字符串的数组;如果没有发现匹配,则返回null。
var x = 'hello world!'
var y = 'my name is yo yo'
var p = /hello/;
console.log(p.exec(x)); //['hello', index: 0, input: 'hello world!', groups: undefined]
console.log(p.exec(y)); //null
compile()方法
用于改变正则表达式,compile()既可以改变检索模式,也可以添加或删除第二个参数
var x = 'hello world!'
var p = /hello/;
console.log(p.test(x)); // true
// 改变p的匹配方式
p.compile('haha');
console.log(p.test(x)); // false
String对象的正则方法
String对象可以支持的正则相关方法
方法 | 描述 |
---|---|
search | 检索与正则表达式相匹配的值 |
replace | 替换与正则表达式相匹配的值 |
match | 找到一个或多个正则匹配 |
split | 把字符串分割成数组 |
search() 方法
search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹配的子串,则返回 -1。
如果找到,则返回与指定查找的字符串或者正则表达式相匹配的 String 对象起始位置。
使用语法
string.search(searchvalue)
searchvalue 参数是必须。可以是查找的字符串或者正则表达式。
使用示例
var x = 'hello world!'
// 可以search 字符串
console.log(x.search('hello')); // 0 返回起始位置
// 也可以search RegExp 对象
console.log(x.search(/hello/)); // 0 返回起始位置
console.log(x.search(/world/)); // 6
replace() 方法
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
语法
string.replace(searchvalue,newvalue)
参数 | 描述 |
---|---|
searchvalue | 必须。规定子字符串或要替换的模式的 RegExp 对象。请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。 |
newvalue | 必需。一个字符串值。规定了替换文本或生成替换文本的函数。 |
使用示例
var x = 'hello world!'
console.log(x.replace(/hello/, "hei")) // hei world!
match() 方法
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
注意: match() 方法将检索字符串 String Object,以找到一个或多个与 regexp 匹配的文本。
这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。
如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。
语法
string.match(regexp)
参数 regexp 必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。
返回值:存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。 如果没找到匹配结果返回 null 。
使用示例:
不区分大小写,查找字符串中的字符o,返回数组
var x = 'hello world!'
console.log(x.match(/o/i)) //['o', index: 4, input: 'hello world!', groups: undefined]
带有全局标志g时
var x = 'hello world!'
console.log(x.match(/o/gi)) // ['o', 'o']
console.log(x.match(/hello/gi)) // ['hello']
没找到返回null
var x = 'hello world!'
console.log(x.match(/xx/gi)) // null
split() 方法
split() 方法用于把一个字符串分割成字符串数组。
语法
string.split(separator,limit)
参数:
- separator 可选,可以是一个字符串或者正则表达式
- limit 可选,该参数可指定返回的数组的最大长度
使用示例
var x = 'hello world!my name is yoyo'
// 匹配空格或!表达式 /[' '|\!]/
console.log(x.split(/[' '|\!]/)) // ['hello', 'world', 'my', 'name', 'is', 'yoyo']