js正则表达式高级用法
1. 声明词量
1. 正向声明
指定匹配模式后面的字符必须被匹配,但又不返回这些字符。语法格式如下:
匹配模式 (?= 匹配条件)
let regex = /(\d)+(?=d)/g
let str = 'd123abc456def'
let a;
while(a = regex.exec(str)){
console.log(a) // expect output: [ '456', '6', index: 7, input: 'd123abc456def', groups: undefined ]
}
2. 反向声明
与正向声明匹配相反,指定接下来的字符都不必被匹配。语法格式如下:
匹配模式(?! 匹配条件)
let regex = /(\d){3}(?!d)/g
let str = 'd123abc456def'
let a;
while(a = regex.exec(str)){
console.log(a) // expect output: [ '123', '3', index: 1, input: 'd123abc456def', groups: undefined ]
}
2. 多次匹配:
想要用exec方法在一个字符串里面多次匹配上某个正则表达式,需要使用while循环,如下:
let regex = /\d+/g
let str = 'd123abc456def'
let a;
while(a = regex.exec(str)){
console.log(a)
}
// expected output :
// [ '123', index: 1, input: 'd123abc456def', groups: undefined ]
// [ '456', index: 7, input: 'd123abc456def', groups: undefined ]
3. 这里附加一下正则表达式的基本用法:
- test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
var reg = /(\d{4})-(\d{2})-(\d{2})/;
var dateStr = '2018-04-18';
reg.test(dateStr); //true
下面的方法都是字符串相关的方法:
- match()方法用于在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
let regex = /\d+/g
let str = 'd123abc456def'
console.log(str.match(regex)) // [ '123', '456' ]
- replace() 字符串替换,并返回替换后的结果(原字符串不做修改):
let regex = /\d+/g
let str = 'd123abc456def'
console.log(str.replace(regex,'HELLO')) // dHELLOabcHELLOdef
- search() 方法。 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
let regex = /\d+/g
let str = 'd123abc456def'
console.log(str.search(regex)) // 1
console.log(str.search(regex)) // 1
-
面试常见易错点
-
支持正则表达式的方法有:
split、match、replace
var myString = "Hello 1 word. Sentence number 2.";
var splits = myString.split(/(\d)/);
console.log(splits); // [ "Hello ", "1", " word. Sentence number ", "2", "." ]
- 取反也要匹配一个字母
let reg = /[^abc]/
reg.exec('brick')
// ['r', index: 1, input: 'brick', groups: undefined]
// 不匹配abc当中任意一个字母,但是必须匹配一个字母