正则表达式 原生JS

正则表达式

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp

(一).课前补充 字符串

转义字符 “\”

反斜杠会强制把后面的东西强制转换成文本

var str = "abc\"snj";//双引号里面打印出双引号
\n换行
\r正常下,一个回车代表\r+\n 行结束+行换行
\t缩进

多行字符串 打印多行文本——编程上让字符串换行

系统规定字符串不能多行展示

var test = "\
<div></div>\
<span><span>\
";

(二).RegExp正则表达式

正则表达式的作用:匹配特殊字符或有特殊搭配原则的字符的最佳选择。

用户输入用户名密码格式校验,例如:输入XXYY才符合

API字典 参考w3school 参考正则表达式pdf

1.两种创建方式

1.直接量(推荐)

var reg =  /abc/;   //匹配这个字符串的规则叫abc 
var str = "abcd";
console.log(reg.test(str));//true

2.new RegExp();

var str = "abcd/m";
var reg = new RegExp("abc");
var reg = new RegExp("abc", "m");

w3c上面有这么一段话
返回值:一个新的 RegExp 对象,具有指定的模式和标志。如果参数 pattern 是正则表达式而不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。如果不用 new 运算符,而将 RegExp() 作为函数调用,那么它的行为与用 new 运算符调用时一样,只是当 pattern 是正则表达式时,它只返回 pattern,而不再创建一个新的 RegExp 对象。

var reg1 = new RegExp(reg);//不同人
var reg1 = RegExp(reg);//同一个人

2.三个属性

(1) 忽视大小写

var reg =  /abc/i;

(2) 全局匹配

var  reg = /ab/;
var str = "abababab";

加上全局

var reg = /ab/g;
var str = "abababab";
console.log(str.match(reg));

(3) 执行多行匹配

var reg = /^a/g;//一行里面以a开头的a
var str = "abcde\na";
// console.log(str.match(reg));----->"a"依旧是一个a
var reg = /^a/gm;//加上m才具有多行匹配功能

两个方法:

reg.test(); 有没有符合要求额片 段----true/false
str.match(reg); 直观匹配

方括号:表达式

匹配三个数字相连接

var reg = /[1234567890][1234567890][1234567890]/g;//一个方括号代表一位
var str = "123jbh987jkbjbnjik"
console.log("str.match(reg)")

演示

var reg = /[ab][cd][d]/g;
var str = "abcd";
console.log("str.match(reg)")//可以取bcd

演示:非

var reg = /[^a][^b]/g;
var str = "ab1cd"
console.log("str.match(reg)")//可以取b1 cd 返回的是数组

括号

var reg = /(abc|bcd)/g;//匹配abc或者bcd
var str = "bcd"
var str = "abc"

括号升级

var reg = /(abc|bcd)[0-9]/g;
var str = "bcd"

元字符

var reg = /\w/g;
//\w===[0-9A-z_]
//\W===[^\w]
//\d===[0-9]
//\D===[^\d]
//\s===[\t\n\r\v\f]
//\S===[^\s]
//\b===单词边界
//\B===非单词边界
// var reg = /\bcde/g;
// var str = "abc ada ads";
// 

unicode编码

一般是6位

量词

Doctype

1.渲染模式

在多年以前(IE6诞生以前),各浏览器都处于各自比较封闭的发展中(基本没有兼容性可谈)。随着WEB的发展,兼容性问题的解决越来越显得迫切,随即,各浏览器厂商发布了按照标准模式(遵循各厂商制定的统一标准)工作的浏览器,比如IE6就是其中之一。但是考虑到以前建设的网站并不支持标准模式,所以各浏览器在加入标准模式的同时也保留了混杂模式(即以前那种未按照统一标准工作的模式,也叫怪异模式)。

三种标准模式的写法

1.<!DOCTYPE html>
2.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
3.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

待穿插知识点

要打印多行字符串 打印多行文本——编程上让字符串换行

方法一:
var test = "\
            <div></div>\
            <span><span>\
            ";//将文本形式的回车转义掉,让他不再是回车
方法二:
var test = "<div></div>" +
    		"<span></span>";

两种创建方式

1.直接量(个人推荐用直接量)

var reg =  /abc/;   //匹配这个字符串的规则叫abc 
var str = "abcd";
console.log(reg.test(str));//test()正则表达式的方法

2.new RegExp();

var str = "abcd/m";
var reg = new RegExp("abc");
var reg = new RegExp("abc", "m");
var reg1 = new RegExp(reg);//长得一样,实际不一样
var reg1 = RegExp(reg);//引用

三个属性

i
var reg =  /abc/i;  //忽视大小写
g
var reg =  /abc/g; //全局匹配
// demo:
var  reg = /ab/;
var str = "abababab";//只会匹配出来一个
// 加上全局匹配:
var reg = /ab/g;
var str = "abababab";
console.log(str.match(reg));
m
var reg =  /abc/m;  //执行多行匹配
demo
var reg = /^a/g;//以a开头的a
var str = "abcde\na";
// console.log(str.match(reg));----->"a"依旧是一个a,没有多行匹配功能
//一旦加上m------:
var reg = /^a/gm;//才具有多行匹配功能


reg.test();//有没有符合要求额片段----true/false
str.match();//直观匹配

方括号:表达式

// 匹配三个数字相连接   
var reg = /[1234567890][1234567890][1234567890]/g;//一个方括号代表一位
var reg = /[ab][cd][d]/g;//可以取bcd??????????????
var str = "abcd";	
var reg = /[0-9A-z][cd][d]/g;
var reg = /[^a][^b]/g;//非
括号:
var reg = /(abc|bcd)/g;
var str = "bcd";

var reg = /(abc|bcd)[0-9]/g;
var str = "bcd2";

量词

n+ : (1, Infinity)
n* : (0, Infinity)

var reg = /\d*/g;
var reg = /\w*/g;
var str = "abc";

n? : (0, 1)
n{X} : (X)
n{x,y} : (x, y)
n{x, } : 不写,默认Infinity
n$ : 开头
    ^n : 结尾

阿里巴巴: 写一个正则表达式,检验字符串首尾是否含有数字(首或尾)

var reg = /^\d|\d$/g;
var str = "123abc";

// 写一个正则表达式,检验字符串首尾是否都含有数字

var reg = /^\d[\s\S]*\d$/g;
var str = "123abc";

正则表达式对象属性

global
ignoreCase
lastIndex
multiline
source

正则表达式对象方法

reg.test();//检索字符串中指定的值,返回true/false	
reg.compile();//编译正则表达式
reg.exec();//检索字符串中指定的值,并确定位置
var reg = /ab/g;
var str = "abababab";
console.log(reg.lastIndex);
console.log(reg.exec(str));
console.log(reg.lastIndex);
console.log(reg.exec(str));
console.log(reg.lastIndex);
console.log(reg.exec(str));
console.log(reg.lastIndex);
console.log(reg.exec(str));
console.log(reg.lastIndex);
console.log(reg.exec(str));
console.log(reg.lastIndex);
//lastIndex可以手动更改值

// 如果不加g
// lastIndex不移动,永远在第一位开始匹配

小知识

var str = "aaaa";//想匹配四个一样的东西
var reg = /(a)\1/g;//反向引用第一个子表达式中的匹配的内容
var reg = /(a)\1/g;//\w匹配出来的那个东西,后面要拷贝一个一样的
var reg = /(a)\1\1\1/g;
// 变式:
var str = "aabb";
var reg = /(\w)\1(\w)\2/g;

jQuery会深入

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


字符串方法:match

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

字符串方法:search

var str = "abc";
var reg = /(\w)\1(\w)\2/g;
console.log(str.search(reg));

字符串方法:split

var str = "aadnsndcbbccdsvwsnkdd";//双向重复拆分
var reg = /(\w)\1/g;
console.log(str.split(reg));

字符串方法:relpace

var str = "aa";		
str.replace("a", "b");//ba  只能匹配一个


var reg = /a/;
var str = "aa";		
str.replace(reg, "b");//ba 没写全局匹配

demo:aabb--->bbaa
var reg = /(\w)\1(\w)\2/g;
var str = "aabb";
console.log(str.replace(reg, "$2$2$1$1"));
demo变式:xyxy--->yxyx
var reg = /(\w)\1(\w)\2/g;
var str = "aabb";
console.log(str.replace(reg, function ($, $1, $2) {

    return $2 + $2 + $1 + $1;//规则随便拼
}));

str.toUpperCase();// 变大写方法
str.toUpperCase().toLowerCase();//变小写

demo // the-first-name—>theFirstName;

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

正向预查、正向断言

var str = "abaaaaaa";
var reg = /a(?=b)/g;//后面跟着b
var reg = /a(?!b)/g;//后面不跟着b

贪婪匹配&&非贪婪匹配

正则表达式默认贪婪匹配

变成非贪婪:

var str = "aaaa";
var reg = /a+?/g;

var str = "aaaa";
var reg = /a{1,3}?/g;//有1不取23

var str = "aaaa";
var reg = /a??/g;//能取0不取1

var str = "aaaa";
var reg = /a*?/g;//能取0不取1

正则表达式专题文档

匹配空格

var str = "aaa aaa";
var reg = / /g;

精通计划

匹配\

var str = "aa\\aaaa";
var reg = /\\/g;

匹配*±?()

var str = "aa?aaaa";
var reg = /\?/g;

高难——字符串去重

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

百度顶级难题

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

//100.000.000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值