正则表达式
总是记不住的正则,再过一遍
能干嘛
- 数据验证。
- 复杂的字符串搜寻、替换。
- 基于模式匹配从字符串中提取子字符串。
构造函数
var regex = new RegExp('xyz', 'i');
var regex = new RegExp(/xyz/i);
var regex = /xyz/i;
// ES6的写法。ES5在第一个参数是正则时,不允许此时使用第二个参数,会报错。
// 返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。
// 下面代码返回”i”。
new RegExp(/abc/ig, 'i').flags
用法及API
String的匹配方法
String.search(string|reg)
参数: string|reg
返回: 第一个与参数匹配的子串的起始位置,如果找不到,返回-1。
说明:不支持全局搜索
'aabbcc'.search('ab') // 1
'aabbcc'.search(/ab/) // 1
'aabbcc'.search(/abc/) // -1
String.replace()
作用:查找并替换字符串。
第一个参数:string|reg
,
第二个参数:要进行替换的字符串,也可以是函数。
用法:
$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串。
$` 位于匹配子串左侧的文本。
$' 位于匹配子串右侧的文本。
$$ 普通字符$。
eg:
'abc'.replace(/b/g, "{$$$`$&$'}")
// 结果为 "a{$abc}c",即把b换成了{$abc}
String.match()
参数:string|reg
返回:一个由匹配结果组成的数组。
'abcabc'.match(/ab/) // ["ab", index: 0, input: "abcabc", groups: undefined]
'abcabc'.match(/ab/g) // ["ab", "ab"]
'abcabc'.match(/abb/g) // null
String.split()
作用:把一个字符串分割成字符串数组。
参数:string|reg
返回:子串组成的数组。
'abcabc'.split('b') // ["a", "ca", "c"]
'abcabc'.split(/b/) // ["a", "ca", "c"]
'abcabc'.split(/b/g) // ["a", "ca", "c"]
RegExp的方法
reg.exec()
参数:str
返回:
- 非全局检索:与String.macth()非全局检索相同,返回一个数组或null。
- 全局检索:尽管是全局匹配的正则表达式,但是exec方法只对指定的字符串进行一次匹配。但是可以反复调用来实现全局检索。在 RegExpObject 的lastIndex 属性指定的字符处开始检索字符串;匹配后,将更新lastIndex为匹配文本的最后一个字符的下一个位置;再也找不到匹配的文本时,将返回null,并把 lastIndex 属性重置为 0。
let reg = /ab/g
let str = 'abcabc'
reg.exec(str) // ["ab", index: 0, input: "abcabc", groups: undefined]
reg.exec(str) // ["ab", index: 3, input: "abcabc", groups: undefined]
reg.exec(str) // null
reg.lastIndex // 0
reg.test()
参数:字符串。
返回:true或false。
reg.test('aaa') // false
reg.test('abc') // true
reg.toString()
返回:字符串
reg.toString() // "/ab/g"
感谢阅读 thx~
本文链接:https://627235655.github.io/2018/07/05/regular-expression/