RegExp对象
正则表达式
正则表达式 Regular Expression 是一种表达文本模式的方法 类似字符串的模板 通常用来按照"给定模式"匹配文本
新建正则表达式有两种方式:
字面量方式 以斜杠表示开始和结束
var regexp=/abc/;
另一种是使用RegExp构造函数
var regexp=new RegExp('abc');
RegExp构造函数还可以接受第二个参数,表示修饰符
var regex = new RegExp('xyz', 'i'); // 等价于 var regex = /xyz/i;
实例方法
RegExp.prototype.test()
正则实例对象的test方法返回一个布尔值 表示当前模式是否能匹配参数字符串
/react/.test('react and vue'); //true
上面代码验证参数字符串中是否包含react 结果返回true
RegExp.prototype.exec()
正则实力对象的exec方法 用来返回匹配结果 如果匹配 则返回一个数组 成员是匹配成功的子字符串 否则返回null
var s='x_y_z'; var r1=/x/; var r2=/a/; var r3=/xy/; r1.exec(s) //[ 'x', index: 0, input: 'x_y_z' ] r2.exec(s) // null r3.exec(s) // null
exec方法的返回数组还包含以下两个属性:
input:整个原字符串。
index:整个模式匹配成功的开始位置(从0开始计数)。
var r=/a(b+)a/; var arr=r.exec('_abbba_aba_'); console.log(arr) //['abbba','bbb'] console.log(arr.index) // 1 从字符串的第二个位置开始匹配成功 console.log(arr.input) //'_abbba_aba_'
如果正则表达式加上g修饰符 贼可以多次使用exec方法 下一次搜索的位置从上一次匹配成功结束的位置开始
var reg=/a/g; var str='abc_abc_abc'; var r1=reg.exec(str); console.log(r1); //[ 'a', index: 0, input: 'abc_abc_abc' ] var r2=reg.exec(str); console.log(r2) // [ 'a', index: 4, input: 'abc_abc_abc' ] var r3=reg.exec(str); console.log(r3); //[ 'a', index: 8, input: 'abc_abc_abc' ]
匹配规则
特殊字符
正则表达式对一些不能打印的特殊字符,提供了表达方法
n 匹配换行键;
r 匹配回车键;
t 匹配制表符 ;
v 匹配垂直制表符;
f 匹配换页符;
0 匹配null字符;
xhh 匹配一个以两位十六进制数(x00-xFF)表示的字符;
uhhhh 匹配一个以四位十六进制数(u0000-uFFFF)表示的 Unicode 字符;
字符类
字符类表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内
/[abc]/.test('hello') //false 不包含a、b、c这三个字母中的任一个,所以返回false /[abc]/.test('apple') //true 包含字母a,所以返回true
脱字符:
如果方括号内的第一个字符是[^],则表示除了字符类之中的字符,其他字符都可以匹配
/[^abc]/.test('hello') //true /[^abc]/.test('bbbc') //false
连字符:
对于连续序列的字符,连字符(-)用来提供简写形式,表示字符的连续范围
/a-z/.test('b') // false 连字符不出现在方括号之中,就不具备简写的作用,只代表字面的含义,所以不匹配字符b /[a-z]/.test('b') // true
重复类
精确匹配次数,使用大括号({})表示
{n}表示恰好重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次
/Ro{2}kie/.test('Rookie') // true 指定o连续出现2次 /Ro{2,5}kie/.test('Rooookie') // true 指定o连续出现2次到5次之间
? 问号表示某个模式出现0次或1次,等同于{0, 1}。 * 星号表示某个模式出现0次或多次,等同于{0,}。 + 加号表示某个模式出现1次或多次,等同于{1,}。
修饰符
表示模式的附加规则,放在正则模式的最尾部。
修饰符可以单个使用,也可以多个一起使用。
g修饰符:
g修饰符表示全局匹配(global),加上它以后,正则对象将匹配全部符合条件的结果,主要用于搜索和替换。
var regex = /b/; var str = 'abba'; regex.test(str); // true regex.test(str); // true regex.test(str); // true
正则模式不含g修饰符,每次都是从字符串头部开始匹配。所以,连续做了三次匹配,都返回true
var regex = /b/g; var str = 'abba'; regex.test(str); // true regex.test(str); // true regex.test(str); // false
正则模式含有g修饰符,每次都是从上一次匹配成功处,开始向后匹配。因为字符串abba只有两个b,所以前两次匹配结果为true,第三次匹配结果为false
i修饰符:
默认情况下,正则对象区分字母的大小写,加上i修饰符以后表示忽略大小写
/abc/.test('ABC') // false /abc/i.test('ABC') // true //加了i修饰符以后,不考虑大小写,所以模式abc匹配字符串ABC
m修饰符:
m修饰符表示多行模式
会修改^和$的行为
字符串的方法
String.prototype.toLowerCase(),String.prototype.toUpperCase()
toLowerCase方法用于将一个字符串全部转为小写,toUpperCase则是全部转为大写。它们都返回一个新字符串,不改变原字符串
'Hello World'.toLowerCase() // "hello world" 'Hello World'.toUpperCase() // "HELLO WORLD"
String.prototype.charAt()
charAt方法返回指定位置的字符,参数是从0开始编号的位置
var s = new String('abc'); s.charAt(1) // "b" s.charAt(s.length - 1) // "c"
String.prototype.charCodeAt()
charCodeAt方法返回字符串指定位置的 Unicode 码
'abc'.charCodeAt(1) // 98
String.prototype.indexOf(),String.prototype.lastIndexOf()
indexOf方法用于确定一个字符串在另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。如果返回-1,就表示不匹配
indexOf方法还可以接受第二个参数,表示从该位置开始向后匹配。
'hello world'.indexOf('o', 6) // 7
lastIndexOf方法的用法跟indexOf方法一致,主要的区别是lastIndexOf从尾部开始匹配,indexOf则是从头部开始匹配。
'hello world'.lastIndexOf('o') // 7
String.prototype.slice()
slice方法用于从原字符串取出子字符串并返回,不改变原字符串。它的第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置)
'JavaScript'.slice(0, 4) // "Java"
如果参数是负值,表示从结尾开始倒数计算的位置,即该负值加上字符串长度
'JavaScript'.slice(-6) // "Script"
String.prototype.substr()
substr方法用于从原字符串取出子字符串并返回,不改变原字符串,跟slice和substring方法的作用相同。
substr方法的第一个参数是子字符串的开始位置(从0开始计算),第二个参数是子字符串的长度。
'JavaScript'.substr(4, 6) // "Script"
如果第一个参数是负数,表示倒数计算的字符位置。如果第二个参数是负数,将被自动转为0,因此会返回空字符串。
'JavaScript'.substr(4, -1) // ""
String.prototype.substring()
substring方法用于从原字符串取出子字符串并返回,不改变原字符串,跟slice方法很相像。它的第一个参数表示子字符串的开始位置,第二个位置表示结束位置(返回结果不含该位置)
'JavaScript'.substring(0, 4) // "Java"
String.prototype.split()
split方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。
'a|b|c'.split('|') // ["a", "b", "c"]
surprise
让一个字符串反转
var str='abcde'; var arr=str.split(""); console.log(arr) //[ 'a', 'b', 'c', 'd', 'e' ] var arr2=arr.reverse(); console.log(arr2) //[ 'e', 'd', 'c', 'b', 'a' ] vvar str2=arr.toString(); console.log(str2); //e,d,c,b,a