文章目录
概念熟悉
正则表达式对象的创建
主要两种:
直接写 正则表达式字面量,
或使用 RegExp 构造方法传入 正则表达式字面量。
注意标志位的设置
r1 = /\d{3}/
/\d{3}/
r2 = /\d{3}/gimy
/\d{3}/gimy
r3 = new RegExp(/\d{3}/)
/\d{3}/
r3 = new RegExp(/\d{3}/gimy)
/\d{3}/gimy
r4 = new RegExp(/\d{3}/, "gimy")
/\d{3}/gimy
正则表达式的标志位 flags
g global 全局模式
i ignoreCase 忽略大小写
m multiline 多行匹配
y sticky 搜索是否具有“粘性” 见MDN RegExp sticky
正则表达式对象的更多属性
String API
String.prototype.replace(searchValue, replaceValue): string
对本字符串中:指定(模式的)字符串 统一替换为 replaceValue。
返回新的结果字符串。
不会改变原字符串。
默认只会替换匹配到的第一个,如果需求是全部替换,则设置正则表达式 global=true
例:
"123asd456hhh".replace(/\d/, "_"); // 替换掉字符串中 第一个 数字字符
"_23asd456hhh"
"123asd456hhh".replace(/\d/g, "_"); // 替换掉字符串中 所有的 数字字符
"___asd___hhh"
String.prototype.split(separator, ?limit): String[]
"aaa666bbb777ccc888".split(/\d+/)
(4) ["aaa", "bbb", "ccc", ""]
String.prototype.match(regexp): string[]
查找字符串str对象中,指定模式的子字符串。
返回匹配到的字符串数组。
依旧注意 flags
"123asd456hhh".match(/\d/)
["1", index: 0, input: "123asd456hhh", groups: undefined]
"123asd456hhh".match(/\d/g)
(6) ["1", "2", "3", "4", "5", "6"]
String.prototype.search(regexp): Number
查找指定(模式的)子字符串 第一次出现的位置(起始点下标)
返回该下标数值。
RegExp API
RegExp.prototype.test(string): boolean
在给定字符串上查找,是否有子字符串与本模式相匹配。
如果想测试整个字符串的模式,可以使用正则表达式的^ $
判断是否为开头和结尾。
/\d{3}/.test("123")
true
/\d{3}/.test("123456")
true
/^\d{3}$/.test("123456")
false
RegExp.prototype.compile(pattern, flag): RegExp
重新编译一个正则表达式。
因API设计不合理,已弃用。
见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/compile
RegExp.prototype.exec(string): string[]
在给定字符串上执行搜索,搜索符合本模式的子字符串。
返回匹配到的子字符串的数组。
详见 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec