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. 这里附加一下正则表达式的基本用法:

  1. test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
var reg = /(d{4})-(d{2})-(d{2})/;
var dateStr = '2018-04-18';
reg.test(dateStr);  //true

下面的方法都是字符串相关的方法:

  1. match()方法用于在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
let regex = /d+/g
let str = 'd123abc456def'
console.log(str.match(regex)) // [ '123', '456' ]
  1. replace() 字符串替换,并返回替换后的结果(原字符串不做修改):
let regex = /d+/g
let str = 'd123abc456def'

console.log(str.replace(regex,'HELLO')) // dHELLOabcHELLOdef
  1. search() 方法。 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
let regex = /d+/g
let str = 'd123abc456def'

console.log(str.search(regex)) // 1
console.log(str.search(regex)) // 1
  1. 面试常见易错点

  2. 支持正则表达式的方法有:
    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", "." ]
  1. 取反也要匹配一个字母
let reg = /[^abc]/

reg.exec('brick') 

// ['r', index: 1, input: 'brick', groups: undefined]
// 不匹配abc当中任意一个字母,但是必须匹配一个字母

原文地址:https://www.cnblogs.com/lyzz1314/p/15290336.html