//匹配AAAA格式
var reg = /(\w)\1\1\1/g; // \1:反向引用第一个子表达式中的内容
//匹配AABB格式
var str = "aabb";
var reg = /(\w)\1(\w)\2/g; // \1:反向引用第一个子表达式中的内容;\2:反向引用第二个子表达式中的内容
console.log(reg.exec(str)); //["aabb","a","b",index:0,input:"aabb"]
var str = "aabb";
var reg = /(\w)\1(\w)\2/g;
//方式1
console.log(str.replace(reg,"$2$2$1$1")); //$1:第一个子表达式
//方式2
console.log(str.replace(reg,function($,$1,$2){ //正则匹配了多少该方法执行几次,采用function方法会更灵活些
return $2+$2+$1+$1;
}));
var str = "the-first-name";
var reg = /-(\w)/g;
str.replace(reg,function($,$1){
return $1.toUpperCase();
})
var str = "aaaaabbbbccc";
var reg = /(\w)\1*/g;
str.replace(reg,"$1");
var str = "10000000000";
var reg = /(?=(\B)(\d{3})+$)/g;
str.replace(reg,".");
如果是检验首尾都含有数字:var reg = /^\d[\s\S]*\d$/g
很明显题目中没有加“都”,所以:var reg = /^\d|\d$/g;
//直接这么在字符串内部换行系统会报错:系统规定字符串内部不可以使用Enter键带来的换行
document.body.innerHTML = "
<div></div>
<span></span>
";
//要想要展示多行字符串,在需要换行的地方使用转义字符(即反斜杠\)
document.body.innerHTML="\
\
\
";
//采用正则直接量定义正则
var reg = /abc/;
var str = "abc";
console.log(reg.test(str)); //true
//采用构造方法创建正则
var reg = new RegExp("abc","g");
var str = "abc";
console.log(reg.test(str)); //true
var reg1 = /abc/;
var reg2 = RegExp(reg1); //只是reg1所指堆空间的一个引用
var reg3 = new RegExp(reg1); //新创建的一个对象
reg1.x = 123;
console.log(reg1.x,reg2.x,reg3.x); //123 123 undefined
var reg1 = /ab/; //不加全局匹配g
var reg2 = /ab/g; //加了全局匹配g
var str = "abababab";
console.log(str.match(reg1)); //["ab"]
console.log(str.match(reg2)); //["ab","ab","ab","ab"]
var reg1 = /^a/g;
var reg2 = /^a/gm; //加了多行匹配
var str = "abcde\nabc"; //字符串中添加了\n换行符
console.log(str.match(reg1)); //["a"]
console.log(str.match(reg2)); //["a","a"]
var reg = /(abc|bcd)/g;
var str1 = "abc";
var str2 = "bcd";
console.log(reg.test(str1)); //true
console.log(reg.test(str2)); //true
var reg = /\w*/g;
var str = "abc";
console.log(str.match(reg)); //["abc",""]
var reg = /\d*/g; //*表示匹配0个或者多个,那么没有匹配的时候,匹配鼠标光标定位点,所以此处的返回值是以下结果
var str = "abc";
console.log(str.match(reg)); //["","","",""]
var str = "aabb";
var reg1 = /(\w)\1(\w)\2/g;
var reg2 = /(\w)\1(\w)\2/;
console.log(str.match(reg1)); //["aabb","a","b",index:0,input:"aabb"]
console.log(str.match(reg2)); //["aabb"]
^
\w === [0-9A-z_ ]
\W === [^\w]
\d === [0-9]
\D === [^\d]
\s === [\n\f\r\t\v ] 注意最后一个指的是空格
\S === [^\s]
\b === 单词边界
\B === 非单词边界
Unicode编码
\u010000~\u01ffff Unicode编码第一层 可以简写为\u0000~\uffff
\u020000~\u02ffff Unicode编码第二层
\u0100000~\u10ffff Unicode编码第16层
正则点 .
恒等于[^\r\n] ,即除了行结束符和换行符之外的任意字符
正则的几个属性
reg.ignoreCase ——正则表达式是否写了i属性
reg.global ——正则表达式是否写了g属性
reg.multiline ——正则表达式是否写了m属性
reg.source ——正则表达式的源文本
reg.lastIndex ——光标所在位置
正则的几个方法
reg.test(str) ——检验str是否含有匹配reg正则的字符串
reg.exec(str) ——检验字符串中指定的值,返回找到的值并确定位置
var str = "aabb";
var reg = /(\w)\1(\w)\2/g; //加了global全局匹配reg.lastIndex才会不断变化
console.log(reg.exec(str)); //["aabb","a","b",index:0,input:"aabb"]
var str = "aabb";
var reg = /(\w)\1/g
console.log(reg.exec(str));
字符串的几个方法
str.match(reg)
str.replace() ——替换与正则匹配的几个子串
var reg = /a/g;
var str = "aa";
console.log(str.replace("a","b")); //"ba" 只替换了一个
console.log(str.replace(reg,"b")); //"aa" replace方法的第二个参数一定要是字符串