RegExp
var reg = /abc/;
var str = 'abcd';
*reg.test(str)====>true*
var reg = /[1234567890][1234567890][1234567890]/g; //三个连着的数字范围(1234567890)
var str = "2312jo3gh123789d4najdiic923jf";
var reg = /[ab][cd][d]/g; //三个连着的字符范wei
var str = "abcd";
^ 放在表达式里面 是 除了(。。。)的意思
var reg = /[^a][^b]/g;
var str = "ab1cd";
上面这穿代码在控制台运行一下:
var reg = /(abc|bcd)/g;// | 是或的意思
var str = "bcd"
看看结果:
var reg = /(abc|bcd)[0-9]/g;// | 是或的意思
var str = "bcd1"
这样写也是正确的
元字符
var reg = /\w/g;
var str = "bcd2";
\w === [0-9A-z_]
\W === [^\w]
\d === [0-9];
\D === [^\d];
\s === [\t\n\r\v\f ];//最后一位是空格。
\S === [^\s];
\b === 单词别介
\B === 非单词边界
试一下 \b:
var reg =/\bc/
var str = "abc cde efg";
结果:
\u0000//四位
\u010000 - \u01ffff //第一层
\u020000 - \u01ffff //第二层
\u100000 - \u10ffff //第三层
. === [^\r\n]
量词(贪婪匹配原则)
//n+ {1, ++}
//n* {0, ++}
//n? {0,1}
//n{X} {x}
//n{x,y} {x,y}
//n{x, } {x, ++}
//^n 以n开头 n&以n结尾
方法
-
reg.test()
-
reg.exec()
reg.lastIndex 不加g的话lastIndex永远不会动。 -
\1 匹配的是前面子表达式的内容。
所以来实现一个匹配 xxxx 四个相同的:
var str = "aaaa";
var reg = /(\w)\1\1\1/g;
- 再来一个匹配 aabb形式的
var str = "aabb";
var reg = /(\w)\1(\w)\2/g;
字符串的属性
- str.search(reg); 会返回对应的位置。
若匹配不到位置 返回 -1。 - reg.replace();
var str = "aa";
var reg = /a/g;
console.log(str.replace("a", "b")); //非正则表达式。
不加g的时候:
加g之后:
把aabb替换成bbaa:
var reg = /(\w)\1(\w)\2/g;
var str = "aabb";
console.log(str.replace(reg, "$2$2$1$1"));
还有一种方法:
var reg = /(\w)\1(\w)\2/g;
var str = "aabb";
console.log(str.replace(reg,function($, $1, $2) {
return $2 + $2 + $1 + $1;
}));
实例:
把 the-first-name 变成小驼峰形式:
var str = "the-first-name";
var reg = /-(\w)/g;
console.log(str.replace(reg, function($, $1) {
return $1.toUpperCase();
}))
成功。
正向预查 正向断言
var str = "abaaaaa";
var reg = /a(?=b)/g; 这句话的意思时,a后面必须跟的是b才行(的a才符合条件)。
var reg = /a(?!b)/g; 这句话的意思时,a后面不跟b才行(的a才符合条件)。
变成非贪婪匹配(能少就不多个了)
var str = "aaaaaa";
var reg = /a?/g;
字符串去重
vat str = "aaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbcccccccccccccccc";
var reg = /(\w)\1*/g;
str.replace(reg, "$1");
给100000000从后往前每三位加一个 , ;
var str = "100000000000";
var reg =/(?=(\B)(\d{3})+$)/g;
console.log(reg, ",");
成功!。