转移符:
显示特殊字符,想显示用‘\’
后面加特殊字母为特定用途。例: 换行(回车); 行结束(正常一个回车代表 + ); -->tab键--> table 缩进
转移符实用场景1:
document.body.innerHTML = "<div>
<span>content</span>
<p>内容</p>
</div>"
两种创建方式:
- 直接量(例:var reg = /规则/正则属性[i/g/m];)推荐
- new RegExp(“规则”, 正则属性);
属性/修饰符(可以一个或多个混合使用):
- i 忽略大小写(ignoreCase)
- g 全局(global)
- m 多行匹配(在有换行符 中匹配多行)
reg.test(); //判断字符串有没有符合要求的片段,返回true或false
str.match(reg); // 把所有符合要求的内容返回,match是字符串的方法
reg.exec(); 以reg.lastIndex的游标位置开始匹配,exec是正则表达式的方法
reg.lastIndex 与 reg.exec()相匹配,如果不加g(即不全局匹配),则lastIndex一直是0
[] // 表达式,代表一位,其中写的是取值区间
^ 如果放在表达式中表示非(!),否则表示以什么开头; ...$表示以...结尾
(值a | 值b) // 取值a或者值b
w (world) === [0-9A-z_]
W === [^w]
d === [0-9]
D === [^d]
s (空白字符) === [ vf ]
S === [^s]
=== 单词边界 例: /cde/g;
B === 非单词边界
. === [^ ]
n+ {1, 正无穷}
n* {0, 正无穷}
n? {0, 1}
正在则表达式默认为贪婪匹配,能一次多个匹配,不会多次少个匹配。
在表达式后加?则为非贪婪匹配
var reg = /^d[wW]*d$/g; // 匹配首尾都是数字
() // 子表达式
/(w)1/; // “1”:反向引用第一个子表达式中的内容 ,即 匹配 xx
reg.exec(str); // 子表达式的值也会被加到类数组中
// 匹配aabb var reg = /(w)1(w)2/g;
str.replace
var str = "aa"; str.replace('a', 'b'); console.log(str); // "ba"(不全局匹配) var reg = /a/; str.replace(reg, 'b'); // ba var reg1 = /a/g; str.replace(reg1, 'b'); //bb
例题:把aabb变成bbaa
var reg = /(w)1(w)2/g; var str = "aabb"; str.replace(reg, "$2$2$1$1"); // $2代表第2个子表达式的内容(反向引用) console.log(str); // bbaa 或 str.replace(reg, function($, $1, $2){ return $2+$2+$1+$1; }) // 回调函数中的$表示正则表达式匹配的结果
匹配汉字: [u4e00-u9fa5]
匹配双字节及汉字: [^x00-xff]
正向预查(正向断言)
在表达式后加 “?” 为非贪婪匹配
(?=值) 为正向预查
var str = "abaaa"; var reg = /a(?=b)/g; // 找后面跟b的a str.match(reg); // a
例题: 科学计数法(1000000..... ==> 100.000.000)
var str = "100000000"; var reg = /(?=(B)(d{3})+$)/g; str.replace(reg, "."); 解析: ?= // 正向预查 B // 非单词边界 d // 数字 {3} // 3个 + //1个或多个 $ //以...结尾(表示从后往前查) g // 全局
例题: 去重
var str = "aaaaaabbbbbdddd"; var reg = /(w)1+/g; str.replace(reg, '$1'); // abd