【javascript笔记】正则表达式
1、转义符号:\
\n:换行, 只能console.log识别
\r:行结束符
正常情况下一个回车为:\r\n
\t: 制表符,缩进
多行字符串:
var test = “\
<div></div>\
<span></span>\
“;
2、创建方式
直接量: var reg = /abc/i;
new RegExp: var reg = new RegExp('abc','m');
var reg = new RegExp(reg1); //reg1也是正则表达式
3、修饰符
i 忽略大小写
g 全局匹配
m 执行多行匹配
var reg = /^a/gm;
var str = “asvd\na”;
可匹配到两个a
4、reg.test(str); true false
str.match(reg); 返回数组,没有匹配就是null
5、表达式
[] 匹配一个字符
[123]: 符合123其中一个的一位
var reg = /[1234567890][1234567890][1234567890]/g;
var str = “12309u98723sdfjhjdshjfhjds”;
str.match(reg); ---> [‘123’, ‘987’]
[0-9A-z]
[^123] ^为非 不是 123
(abc | dfg) abc或dfg
6、元字符
\w ===[0-9A-z_]
\W===[^\w]
\d ===[0-9]
\D ===[^\d]
\s=== [\t\n\r\v\f ] --> 制表符 换行符 回车符 垂直制表符 换页符 空格
\S ===[^\s]
\b===单词边界: var str = 'abc ced fgh'; var reg = /\bcde\b/g; -->['ced']
var reg = /\tc/g; var str = 'abc/tcdefgh'; -->[' c']
\B===非单词边界
. ===[^\r\n]
[\w\W] 这代表一切
7、量词
n+ 匹配1到正无穷个 var reg= /\w+/g; var str = "abc"; -->["abc"]
n* 匹配0到正无穷个 var reg= /\w*/g; var str = "abc"; -->["abc", ""]
n? 匹配0-1个
n{X} 匹配x个个 var reg= /\w{3}/g; var str = "abc"; -->["abc"]
n{x,y} 匹配x-y个,包括y,当{x, } y不写时,表示正无穷
n$ 以n结尾
8、^ :
$ :
检验一个字符串首尾是否含有数字
var reg = /^\d[\s\S]*\d$/g
var str = '1ghghg5';
Reg.test(str); --> true
9、方法
(1)reg.exec():
(2)reg.lastIndex :返回下一个reg.exec()的index的值,可以修改reg.exec()返回的index的值
(3)
“a” “b” 这两个分别是第一个子表达式的内容
(4) str.search(reg) : 返回匹配到的字符串的位置,如果找不到,返回 -1
(5)str.splict(reg): 根据正则表达式分割字符串
当正则表达式是是子表达式时,会返回分割的字符
(6)str.replace(reg);
replace 里面不是正则表达式,只能匹配一个
aabb 变成 bbaa
var reg= /(\w)\1(\w)\2/g;
var str = ‘aabb’;
str.replace(reg, ‘$2$2$1$1’); $1第一个子表达式的内容 $2第二个子表达式的内容
str.replace(reg, function($, $1, $2) { //参数:1全局 2、3同上
return $2 + $2 + $1 + $1 + $1 + ‘abc’; //返回的是 bbaaaabc
});
the-first-name 变成 theFirstName
var reg = /-(\w)/g;
var str = “the-first-name”;
str.replace(reg, function($, $1){
return $1.toUpperCase();
})
//正向预查,正向断言
var str = “abaaaa”;
var reg = /a(?=b)/g; //只找后面跟着 b 的 a
var reg = /a(?!b)/g; //找后面不跟着 b 的 a
贪婪匹配:
var str = “aaaaa”;
var reg = /a+/g;
非贪婪匹配:
var reg = /a+?/g; //在量词后面加上 ?
var reg = /a??/g; //能取 0 不取1
var str = “aaaaaaaaaabbbbbbbbbbbcccccccccccccc”;
var reg = /(\w)\1*/g;
str.replace(reg, ‘$1’); ---> ‘abc’
var str = ‘100000000’; --> 100.000.000
var reg = /(?=(\B)(\d{3})+$)/g;
str.replace(reg, “.”);