RegExp——正则表达式

一、匹配指定格式的字符串(AAAA、AABB)

//匹配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"]

二、将aabb替换为bbaa

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;
}));

RegExp——正则表达式_第1张图片

三、将the-first-name转换为驼峰式theFirstName

var str = "the-first-name";
var reg = /-(\w)/g;
str.replace(reg,function($,$1){
	return $1.toUpperCase();
})

四、字符串去重:将“aaaaabbbbccc”=>“abc”

var str = "aaaaabbbbccc";
var reg = /(\w)\1*/g;
str.replace(reg,"$1");

在这里插入图片描述

五、将10000000000=>10.000.000.000

var str = "10000000000";
var reg = /(?=(\B)(\d{3})+$)/g;
str.replace(reg,".");

RegExp——正则表达式_第2张图片

六、检验字符串首尾是否含有数字的正则表达式(审题)

如果是检验首尾都含有数字:var reg = /^\d[\s\S]*\d$/g
很明显题目中没有加“都”,所以:var reg = /^\d|\d$/g;
  • 栗子1——转义字符:反斜杠\
//直接这么在字符串内部换行系统会报错:系统规定字符串内部不可以使用Enter键带来的换行
document.body.innerHTML = "
	<div></div>
	<span></span>
";
//要想要展示多行字符串,在需要换行的地方使用转义字符(即反斜杠\)
document.body.innerHTML="\
	
\ \ "
;
  • 栗子2——正则两种定义方式
//采用正则直接量定义正则
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
  • 栗子3——不同方法定义正则返回值说明
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
  • 栗子4——正则属性:global
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"]
  • 栗子5 ——正则属性:多行匹配m
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"]
  • 栗子6——正则或|表达式
var reg = /(abc|bcd)/g;
var str1 = "abc";
var str2 = "bcd";

console.log(reg.test(str1));    //true
console.log(reg.test(str2));    //true
  • 栗子7——正则量词之*,\w===[0-9A-z_],\d===[0-9]
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));     //["","","",""]
  • 栗子8——正则匹配指定表达式
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"]

正则知识点梳理


^

  1. 放在正则双斜杠中,指的是“以什么开头"
  2. 放在中括号[ ]表达式中,指的是“非”

\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"] 
	

RegExp——正则表达式_第3张图片

var str = "aabb";
var reg = /(\w)\1/g
console.log(reg.exec(str));  
	

RegExp——正则表达式_第4张图片


字符串的几个方法
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方法的第二个参数一定要是字符串

reg.search(reg)——找不到返回-1
.
RegExp——正则表达式_第5张图片

你可能感兴趣的:(前端)