js-进阶 正则表达式

正则表达式

1、为什么需要正则表达式

因为我们常常要对用户输入的字符串进行匹配,看用户输入是否符合我们的要求

2、什么是正则表达式

所谓正则表达式,就是用于字符串中的 信息进行查找,替换和提取等操作。

创建正则表达式的方式,有两种,字面量,对象创建

字面量创建:

语法:let parttern=/正则规则/模式修正符

reg.test()

对象创建:

语法:let = new RegExp(”正则规则”,”模式修饰符”);

3、正则表达式的组成部分

如果是字面量创建正则的方式,正则可以分为4个部分:定界符//,原子at,元字符,模式修正符(前两个必须要写)

如果是对象方式创建的正则,那么就由3个部分组成:原子、元字符、模式修正符

4、定界符

就是约定正则表达式开始和结束的地方,使用的是一个斜杠(/)

5、原子

原子就是普通的字符,换句话说,正则里面写了什么原子,那么字符串就必须要出现这个字符。

6、元字符

就是有特殊含义的字符(+*?)

7、模式修正符

对正则表达式进行一定的扩充

i就是一个模式修正符,它可以忽略大小写

正则表达式类型和数组相同,无论哪种方式创建,返回类型都是object

元字符作为原子

方法很简单,元字符前面添加一个转译字符(\)

8、元字符具体符号

(1)字符组

使用方括号来进行表示。代表方括号里面的原子出现一个即可

let reg=/[abcd]/;

console.log(reg.test(“acc”));

范围:在字符组里面,正则表达式使用一个-来表示范围,可以简化字符组。

1.1 范围按照的是ASCLL码从小到大的排序,所以不能反着写。

1.2 在一个字符组里面可以书写多个范围

1.3 -只有在字符组里面才代表范围,如果出了字符组,那代表它原来的意思

排除:主要用于字符组里面,代表除了什么之外,用来表示^来表示

【^ 0-9】

排除符号书写在【后面,如果书写的位置不在它后面,则不代表排除,而代表它原来的意思

(2) 简记

对于0-9 ,a-z这种常用的,正则里面提供了默认的简单书写方式

\d:等同于[0-9],用于匹配数字

\D:等同于[^0-9],匹配非数

let reg=/^\dab/;

\s:代表匹配空白字符

\S:匹配非空白字符

\w:匹配数字字母下划线,等同于[0-9A-Za-z_]

\W:匹配非数字字母下划线。等同于[^0-9A-Za-z_]

(3) 点符号

点是匹配除了回车,换行,制表符以外的任意字符

匹配任意字符: [\d\D]  [\w\W]   [\s\S]

(4) 量词 (就是指的前面那个字符)

指定一个东西匹配多少次

{n} 匹配n次

{n.m}匹配至少n次,最多m次;

{n,}匹配至少n次

?可以出现,也可以不出现,相当于{0,1}

  • 至少出现1次,或者1次以上 相当于{1, }

* 匹配0次或者多次 相当于 {0, }

贪婪模式和懒惰模式

贪婪模式:默认情况喜爱,量词的匹配都是贪婪模式,所谓贪婪,就是指能匹配多少个,就匹配多少个。(默认)

reg.exec(str);

懒惰模式:只要匹配上一个,就返回,后面的不再进行匹配

开启懒惰模式,只需要在量词后面添加一个?即可

(5)括号

两个功能:分组和引用

分组:就是将小原子组合成一个大的原子

let  reg=/(ab){2}/;

捕获:括号不仅用于分组,还会保存每个分组所匹配的文本。等到匹配完成之后,可以引用捕获到的文本,通过$数字,默认是9个,分别对应$1-$9

RegExp.$ 1.2.3….

let reg=/(\d{4})-(\d{2})-(\d{2})/;

console.log(reg.test("2017-11-20"));

console.log(RegExp.$1);

console.log(RegExp.$2);

console.log(RegExp.$3);

反向引用:首先,这个还是和捕获的内容有关。我们可以对捕获的内容进行一个反向的引用,通过\数字来引用括号里面的内容

let reg=/(ab)(cd)\2/;

console.log(reg.test("abcdcd"))//true

非捕获(跳过某一个子表达式)使用?:   括号称为子表达式

let reg=/(?:ab)(cd)\1/;

console.log(reg.test("abcdcd"))//

()起始和结束****

如果是开始,使用^,如果是结束,使用$

let reg=/^\d{6}$/;

console.log(reg.test("610000"))

//匹配用户名  字母开头 5-8 长度不小于5

let reg=/^[a-z]\w{4,7}$/i;

选择:或者  |

需要注意:选择(|)的优先级是最低的,所以上看的正则匹配到的是ab或者cd,而不是a和b

时间: 2024-10-18 00:40:08

js-进阶 正则表达式的相关文章

进阶正则表达式

进阶正则表达式 关于正则表达式,网上可以搜到一大片文章,我之前也搜集了一些资料,并做了排版整理,可以看这篇文章http://www.cnblogs.com/hustskyking/archive/2013/06/04/RegExp.html,作为基础入门讲解,这篇文章说的十分到位. 记得最开始学习正则,是使用 php 做一个爬虫程序.为了获取指定的信息,必须用一定的方式把有规律的数据匹配出来,而正则是首选.下面是当时写的爬虫程序的一个代码片段: $regdata = "/<font siz

[JS进阶] HTML5 之文件操作(file)

前言 在 HTML 文档中 <input type="file"> 标签每出现一次,一个 FileUpload 对象就会被创建. 该元素包含一个文本输入字段,用来输入文件名,还有一个按钮,用来打开文件选择对话框以便图形化选择文件. 该元素的 value 属性保存了用户指定的文件的名称,但是当包含一个 file-upload 元素的表单被提交的时候,浏览器会向服务器发送选中的文件的内容而不仅仅是发送文件名. 当用户选择或编辑一个文件名,file-upload 元素触发 onc

js 常用正则表达式表单验证代码

js 常用正则表达式表单验证代码 js 常用正则表达式表单验证代码,以后大家就可以直接使用了. 正则表达式使用详解 简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.其作用如下:测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证.替换文本.可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字.根据模式匹配从字符串中提取一个子字符串.可以用来在文本或输入字段中

【 D3.js 进阶系列 】 进阶总结

进阶系列的文章从去年10月开始写的,晃眼又是4个多月了,想在年前总结一下. 首先恭祝大家新年快乐.今年是羊年吧.前段时间和朋友聊天,聊到十二生肖里为什么没猫,我张口就道:不是因为十二生肖开会的时候猫迟到了吗? 呵呵,不知道这是谁给我灌输的观点.o(>﹏<)o 进阶系列的文章分为两部分,文章前括号里写有: [D3.js 进阶系列] [D3.js 选择集与数据详解] 虽然称之为"进阶",但并不是说一定要看完"入门"才能看.由于本人能力有限,不能很好地整理成由

JS 常用正则表达式

匹配负整数的正则表达式: -[0-9]*[1-9][0-9]* 匹配整数的正则表达式: -?\\d+ 匹配非负浮点数(正浮点数 + 0)的正则表达式: \\d+(\\.\\d+)? 匹配正浮点数的正则表达式: (([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)) 匹配非正浮点数(负浮点数 + 0)的正则表达式: ((-\\d+(\\.\\d+)?)|(0+(\\.0+)?)) 匹配负浮点数的

[JS进阶] JS 之Blob 对象类型

什么是Blob? Blob 是什么? 这里说的是一种Javascript的对象类型. oracle 中也有类似的栏位类型. 在 [JS进阶] HTML5 之文件操作(file) 这一篇中用到了File对象,而实际上 file 对象只是 blob 对象的一个更具体的版本,blob 存储着大量的二进制数据,并且 blob 的 size 和 type 属性,都会被 file 对象所继承. 所以, 在大多数情况下,blob 对象和 file 对象可以用在同一个地方,例如,可以使用 FileReader

【 D3.js 进阶系列 — 1.1 】 其他表格文件的读取

CSV 表格文件是以逗号作为单元分隔符的,其他还有以制表符 Tab 作为单元分隔符的 TSV 文件,还有人为定义的其它分隔符的表格文件.本文将说明在 D3 中如何读取它们. 1. TSV 表格文件是什么 TSV(Tab Separated Values),制表分隔值,它和 CSV 文件仅仅是分隔符不一致.它的格式如下: name age 张三 22 李四 24 2. D3 中读取 TSV 文件 在 D3 中读取 TSV 文件的方法和 CSV 文件是一样的,只要更改一下函数名即可.方法如下: d3

《饿了么大前端 Node.js 进阶教程》—Javascript 基础问题—引用传递

<饿了么大前端 Node.js 进阶教程>地址:https://github.com/ElemeFE/node-interview 1.如何编写一个 json 对象的拷贝函数 function clone(obj){ var result; if (Array.isArray(obj)) { result = []; obj.forEach((item) => { result.push(clone(item)); }); } else if (typeof obj === 'objec

《饿了么大前端 Node.js 进阶教程》—Javascript 基础问题—作用域

<饿了么大前端 Node.js 进阶教程>地址:https://github.com/ElemeFE/node-interview 作用域从某种意义上来说是个难点,它需要你真真正正的了解JS的分词.词法分析,语法分析,代码生成,LHS查询,RHS查询等深层的东西. 如果不知道可以读一下<你不知道的JavaScript:上卷> let和var的区别 1.let只在声明的代码块中有效,{}中使用let声明变量,外面是访问不到的,这就是块级作用域 2.不存在变量提升问题 3.重复声明会报

Js用正则表达式验证字符串

js 常用正则表达式表单验证代码 作者: 字体:[增加 减小] 类型:转载 js 常用正则表达式表单验证代码,以后大家就可以直接使用了. 正则表达式使用详解 简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.其作用如下: 测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证. 替换文本.可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字. 根据模式匹配从字符