一:创建正则对象:
var reg = new RegExp('条件','igm')
var reg = new RegExp('xyz', 'igm');
var reg = /xyz/igm
二:转义字符:
特殊字符:
\n -> 换行
\r -> 回车
\t -> 制表符
转义符:
i ignore case 忽略大小写
g global 全局匹配
m multi-line 多行匹配
元字符:
\w [0-9A-z_]
\W [^\w]
\d [0-9]
\D [^\d]
\s [\r\n\t\v\f] 空格符
\S [^\s]
\b 单词边界
\B 非单词边界
三:匹配规则:
贪婪模式:
字符串重左到右进行匹配,依次先匹配多的,再匹配少的。
一旦匹配上就不回头进行匹配
原则: 能匹配多,不会匹配少
非贪婪模式:
开启: var reg = /{{ (.*?) }}/g
*? || +? || ??
表示非贪婪模式;
四:子表达式反向引用:
var reg = /(a)\1\1\1/g
var str = 'aaaaaabbbbbbbccccccc'
var reg = /(\w)\1*(\w)\2*(\w)\3*/g;
console.log(str.match(reg));
const res = str.replace(reg, function(node, key1, key2, key3) {
return key1 + key2 + key3
});
五:方法:
str.match(reg)
方法
reg = /\d/g
全局匹配,返回匹配出的字符
var str = 'asdsf12bdf2dsfa3bdf134';
var reg = /\d/g;
console.log(str.match(reg));
非全局匹配:
var str = 'asdsf12bdf2dsfa3bdf134';
var reg = /\d/;
console.log(str.match(reg));
// --------------------------------------------
var str = '123456123,123,321'
str.match(/123/g) // ['123', '123', '123']
// ['123', index: 0, input: '123456123,123,321', groups: undefined]
str.match(/123/)
// ['12345', '45', index: 0, input: '123456123,123,321', groups: undefined]
str.match(/123(234)/)
// ['1234561', '45', '61', index: 0, input: '123456123,123,321', groups: undefined]
str.match(/123(45)(61)/)
index
匹配到的第一个字符索引;input
原始字符
2. reg.exec(str)
方法
var str = 'asdsf12bdf2dsfa3bdf134';
var reg = /\d/g;
console.log(reg.exec(str));
console.log(reg.exec(str));
console.log(reg.exec(str));
console.log(reg.exec(str));
console.log(reg.exec(str));
3. str.split(reg)
方法
var str = 'asdsf12bdf2dsfa3bdf134';
var reg = /\d/g;
console.log(str.split(reg));
// (8) ['asdsf', '', 'bdf', 'dsfa', 'bdf', '', '', '']
4. str.replace(reg, (node, key1, key2) => {}) || str.replace(reg, '$$1$2')
Str.replace(reg, function($, $1,$2) {
$: 匹配出来的字符
$1: 第一个子表达式
$2: 第二个子表达式
})
str.replace(reg, function(node, key1, key2) {
// 同上
})