文章目录

  • 正则
  • 参考
  • 入门:提取数字
  • 详解
    • 创建正则
    • 跟正则相关的字符串方法
      • split
      • replace
      • match
      • search
    • 元字符
    • 零宽断言
      • 正向肯定断言
      • 正向否定断言
      • 负向肯定断言
      • 负向否定断言
    • 匹配模式

正则

为什么要学正则,正则这东西可真的太神奇了,可以把字符串弄得服服帖帖的,不然你跟字符串相处就不是那么亲昵 hhhh


参考

开课吧的网课~这里是个整理


入门:提取数字

给你一串字符串 123jkh123hjk213h213jk43bmnb,请把这里的数字提取出来

第一种方法,写个函数

function getNumber(str){let arr = [];let temp = "";for(let i=0;i<str.length;i++){// console.log(typeof str[i]);if(!isNaN(str[i])){// console.log("数字");temp += str[i];}else{// console.log("非数字");if(temp!=""){arr.push(temp);temp = "";}}}if(temp!=""){arr.push(temp);}return arr;
}
let res = getNumber(str);
console.log(res);

判断字符串中是不是数字可以用isNaN()

第二种方式:正则

let reg = /\d+/g;
let arr = str.match(reg);
console.log(arr);

详解

创建正则

  • 字面量
  • 构造函数
let str = "dsajlkjrwlj";
let regExp1 = /\d+/g;                     // 字面量创建正则
let regExp2 = new RegExp("\\d+","g")      // 构造函数创建正则,第二个参数是匹配模式

跟正则相关的字符串方法

split

let str = "babbabbbabbbb";
let arr = str.split(/a/);
console.log(arr);   // (4) ["b", "bb", "bbb", "bbbb"]

replace

let str = "abcd1234";
let reg = /\d+/g;
let res = str.replace(reg,"*");
console.log(res);   // abcd*

可以用来做敏感词过滤,可以看下一个例子

let str = "澳门赌场,真人发牌,av女优";
// 教育部 、 人员;
let reg = /赌场|av|女优/g;
// let res = str.replace(reg,"*");
let res = str.replace(reg,function(arg){// 回调函数中能够拿到匹配到的结果str.replace(reg,"*");return "*".repeat(arg.length);
})
console.log(res);   // 澳门**,真人发牌,****

match

let str = "abcd1234";
let reg1 = /\d+/g;
let reg2 = /\d+/;
// 如果不是全局匹配的话,他会拿到很多详细的
let res1 = str.match(reg1);
let res2 = str.match(reg2);
console.log(res1);   // ["1234"]
console.log(res2);   // ["1234", index: 4, input: "abcd1234", groups: undefined]

search


// 4.search:匹配第一个符合结果的索引值位置;如果找不到 就返还-1;
// 忽略全部匹配;所以加g 或者 不加g 没什么区别
let str = "fdsfda323fdaf1232";
let reg = /\d+/;
let res = str.search(reg);
console.log(res);

元字符

啥叫元字符呢?

元字符:正则中有特殊含义的非字母字符;
比方说. *(0次或者多次) + ? $ ^ | \ () [] {};

下面会一一介绍每个元字符的作用

. 除了 \n \r \u2028\u2029 以外的所有字符

\ 转义:将特殊含义转换成字面量含义

* 出现零次或多次

^ 开头、$结尾、\w 字母、数字、下划线

// let str = "cde__111fg";
let str = "cde__111f";      // 测试的话改这里
// let reg = /^c\w+g$/g;
let reg = /^c\w+g$/g;
// let res = reg.test(str);
let res = str.match(reg);
console.log(res);

[] 字符集合

let str = "dffdabfds123fdabfdb435afdsa";
// let reg = /a|b/g;
let reg = /[ab]/g;
let reg = /[^ab]/g; // 尖括号写在集合里面,就是取反的意思
let res = str.replace(reg,"*");
console.log(res);
// 以下两个意思相同
let reg1 = /\d+/g;
let reg2 = /[0-9]+/g;
// 多种方式
// . === [^\r\n]
// \d === [0-9];
// \w === [a-zA-Z_0-9];

\b 边界:非 \w 都被称为边界;

// 想要匹配 前面的is ,而不是 this 中的 is
let str = "is this a book?";
let reg = /\bis\b/g;
// let reg = new RegExp("\\bis\\b","g");
let arr =  str.match(reg);
console.log(arr);

{} 说明匹配的数量

() 分组

let str = "abfdssafdsababljljabssfd";
/* ? --- {0,1} + --- {1,} * --- {0,}     {2};
*/
let reg = /s{2}/g;      // {} 指定数量
let reg = /(ab){2}/g;   // abb
let res = str.replace(reg,"*");
console.log(res);

$反向引用:根据分组

// 转换时间格式:2019-10-19  ---->  19/10/2019;
// 反向引用;
let mytime = "2019-10-19";
let reg = /(\d{4})-(\d{1,2})-(\d{1,2})/g;
let reg1 = /(\D+)/g;
let res = mytime.replace(reg,"$3/$2/$1");       // 正则里的东西,拿过来引用,通过分组
console.log( RegExp.$1 );                       // 2019let res1 = mytime.replace(reg1,"-");            //
console.log( RegExp.$1 );                       // -
console.log(res);                               // 通过 RegExp 反向引用是有顺序的,应该是保留最后一次用正则的结果

命名分组:?<分组名> ES2018 新增特性

let str = "$name=zhangsan&age=20";
let reg = /\$(?<str>\w+)/;
let res = str.match(reg);
console.log(res.groups.str);

零宽断言

这是 ES2018 也就是 ES9 的语法。

我理解的啊

所谓的正向反向是针对 断言 的,(断言的意思就是猜测,不确定的东西。比方说 iphone6iphone7 等等,这些数字就是需要猜测的)

正向断言就是:猜后面,改前面
反向断言就是:猜前面,改后面

正向肯定断言

分组之后 (?=)

let str = "iphone3iphone4iphone11iphoneNumber";
// iphone 换成“苹果”;
// 匹配的条件是 iphone 后面必须接 一到两个 数字
let reg = /iphone(?=\d{1,2})/g;
let res = str.replace(reg,"苹果");
console.log(res);       // 苹果3苹果4苹果11iphoneNumber

正向否定断言

(?!)

let str = "iphone3iphone4iphone11iphoneNumber";
// iphone 换成“苹果”;
let reg = /iphone(?!\d{1,2})/g;
let res = str.replace(reg,"苹果");
console.log(res);   // iphone3iphone4iphone11苹果Number

负向肯定断言

(?<=)

// let str = "10px20px30pxipx";
// // px-->像素;
// let reg =  /(?<=\d{2})px/g;
// let res = str.replace(reg,"像素");
// console.log(res);   // 10像素20像素30像素ipx

负向否定断言

(?<!)

// 负向否定断言;猜前面,改后面
let str = "10px20px30pxipx";
// px-->像素;
let reg =  /(?<!\d{2})px/g;
let res = str.replace(reg,"像素");
console.log(res);       // 10px20px30pxi像素

匹配模式

// 匹配模式
// g:全局匹配
// i:忽略大小写;
let str = "aaaaaAAAAAA";
let reg = /a/g;
let reg1 = /a/gi;
let res = str.replace(reg,"*");
let res1 = str.replace(reg1,"*");
console.log(res);   // *****AAAAAA
console.log(res1);  // ***********

m 多行匹配

let str = `aaaaa
aaaaa`;
let reg1 = /^\w/g;
let reg2 = /^\w/gm;
let res1 = str.replace(reg1,"*");
let res2 = str.replace(reg2,"*");
console.log(res1);
/* *aaaaaaaaa */console.log(res2);
/*  *aaaa*aaaa */

s 可以让 . 匹配到换行符

let str = `<div>some value..</div>`;
let reg1 = /<div>.*<\/div>/g;
let reg2 = /<div>.*<\/div>/gs;
// “\” 转义:将特殊含义转换成字面量含义;
let res1 = reg1.test(str);
let res2 = reg2.test(str);
console.log(res1);      // false
console.log(res2);      // true

u

// `\uD842\uDFB7` 是 汉字 												

【前端32_高级】正则表达式:元字符、断言、匹配模式相关推荐

  1. 正则表达式的全局匹配模式

    首先,要明确一点,所有的正则表达式都有一个lastIndex属性,用于记录上一次匹配结束的位置.如果不是全局匹配模式,那lastIndex的值始终为0,在匹配过一次后,将会停止匹配. 正则表达式的全局 ...

  2. Javascript中正则表达式的全局匹配模式

    先看一道JavaScript题目,据说是国内某知名互联网企业的JavaScript笔试题,如果对正则的全局匹配模式不了解的话可能会对下面的输出结果感到疑惑. View Code var str = & ...

  3. 正则表达式三种匹配模式:贪婪模式,勉强模式,占有模式的区别

    正则表达式一共有三种模式:贪婪模式.勉强模式.侵占模式. 我在做项目的时候,曾领教过正则"回溯陷阱"的厉害,所以,今天做个总结下正则常见的两种模式的区别: [贪婪模式]:正则表达式 ...

  4. php正则表达式如何找到匹配模式中的最后一组

    转载于:https://www.cnblogs.com/MyFlora/archive/2013/06/07/3124073.html

  5. java正则全局匹配_正则表达式全局匹配模式(g修饰符)

    正则表达式g修饰符: g修饰符用语规定正则表达式执行全局匹配,也就是在找到第一个匹配之后仍然会继续查找. 语法结构: 构造函数方式: new RegExp("regexp",&qu ...

  6. java中正则全局匹配_JS中正则表达式全局匹配模式/g用法实例

    JS中正则表达式全局匹配模式 /g用法详解 本文章来详细介绍js中正则表达式的全局匹配模式 /g用法, var str = "123#abc"; var re = /abc/ig; ...

  7. JS:正则表达式中的替换 replace(内容包含匹配模式)

    replace()方法可以实现替换字符的操作,用来替换的参数可以是字符串或正则表达式. 语法格式: // 第一个参数:被替换的可以是字符串也可以是正则表达式 // 第二个参数:替换为新的字符串 // ...

  8. Nginx正则表达式与location匹配简介

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.nginx rewrite概述 1.概述 2. 跳转场景​ 3. 跳转实现 4. rewrite实际场景 二.nginx ...

  9. Python高级——正则表达式 re模块1.match方法

    python:正则表达式 一.什么是正则表达式 正则表达式也叫做匹配模式(Pattern),它由一组具有特定含义的字符串组成,通常用于匹配和替换文本. 正则表达式,是一个独立的技术,很多编程语言支持正 ...

最新文章

  1. 中科大计算机专硕英语,211科班一战394上岸中科大软院专硕2021
  2. WebForm(文件上传)
  3. Java-Web Response响应和Request请求
  4. MySQL子查询优化思路
  5. centos利用nexus搭建局域网docker私有仓库
  6. VBA如何打开html文件6,VBA程序中如何自动打开网页
  7. 服务器u盘安装win7系统,如何用U盘安装win7原版64位系统
  8. linux opera flash插件,Opera 浏览器找不到 flash 插件的解决方案
  9. (剑指Offer)面试题49:把字符串转换为整数
  10. [LINUX] 误删了/lib 怎么办?
  11. 给出中序和前序求后序Java,已知二叉樹前序,中序遍歷,求后序遍歷,java實現...
  12. 杭电1.3.6考试排名
  13. 【记录】【解决方案】java发邮件错误:Couldn‘t connect to host, port: localhost, 25; timeout -1;易邮SMTP服务器无法启动;
  14. html怎么获取手机mac地址,js获取mac地址_Js获取客户端IP地址与MAC地址
  15. 【收集】Oracle官网账号
  16. 京东商品的历史价格走势
  17. 宇宙无敌第一IED Visual studio 常用快捷键使用
  18. mysql datasource property_spring配置datasource三种方式
  19. 卫片图斑_整治“卫片图斑”,让违建无处可逃!
  20. Android开发技术

热门文章

  1. 【MyBatis】myBatis动态传入表名、字段名(列名)进行查询
  2. MySQL主从同步延迟原因与解决方案
  3. HTML5期末大作业:游戏类网站设计——王者荣耀(60页) HTML+CSS+JavaScript
  4. 给VMware虚拟机添加TPM
  5. IOS开发之GitHub优秀源码分享/优秀第三方转载
  6. 纯js实现打字机效果
  7. c语言/洛谷学习笔记之顺序结构(完结)
  8. 关于货物贸易,服务贸易(虚拟类)的业务场景结汇
  9. 【Python爬虫+数据可视化】国内疫情或将零增长,我们离疫情结束有多远?(世界地图)
  10. 转载:道路车辆先进驾驶辅助系统(ADAS)术语及定义