1.RegExp构造函数
es5写法:
var regex = new RegExp('xyz', 'i'); // 等价于 var regex = /xyz/i; var regex = new RegExp(/xyz/i); // 等价于 var regex = /xyz/i;
es6写法:
var regex = new RegExp(/xyz/, 'i');
2.字符串的正则方法
字符串对象共有 4 个方法,可以使用正则表达式:match()
、replace()
、search()
和split()。
ES6 将这 4 个方法,在语言内部全部调用RegExp
的实例方法,从而做到所有与正则相关的方法,全都定义在RegExp
对象上。
String.prototype.match 调用 RegExp.prototype[Symbol.match]
String.prototype.replace 调用 RegExp.prototype[Symbol.replace]
String.prototype.search 调用 RegExp.prototype[Symbol.search]
String.prototype.split 调用 RegExp.prototype[Symbol.split]
3.后行断言
es5先行断言:
先行断言:x(?=y)(x只有在y前面匹配)
/\d+(?=%)/.exec('100% of US presidents have been male') // ["100"] 先行否定断言:/x(?!y)/(x只有不在y前面才能匹配) /\d+(?!%)/.exec('that’s all 44 of them') // ["44"]
es6后行断言:
后行断言:/(?<=y)x/ 只匹配美元符号之后的数字,要写成/(?<=\$)\d+/
后行否定断言:/(?<!y)x/ 比如,只匹配不在美元符号后面的数字,要写成/(?<!\$)\d+/
。
/(?<=\$)\d+/.exec('Benjamin Franklin is on the $100 bill') // ["100"] /(?<!\$)\d+/.exec('it’s is worth about €90') // ["90"]
下面的例子是使用后行断言进行字符串替换。
const reg= /(?<=\$)foo/g; '$foo %foo foo'.replace(reg, 'bar'); // '$bar %foo foo'
上面代码中,只有在美元符号后面的foo
才会被替换。