JS 正则表达式(数字、正则)

阅读数:60 评论数:0

跳转到新版页面

分类

html/css/js

正文

一、基本语法

1、字面量创建

var reg = /正则表达式/修饰符

2、构造函数创建

var reg = new RegExp('正则表达式','修饰符')

3、修饰符

i ignoreCase, 匹配忽视大小写
m multiline , 多行匹配
g global,全局匹配

4、正则表达式

(1)字符类

\o Null字符
\t 制表符
\n 换行符
\v 垂直制表符
\f 换页符
\r 回车符
. 匹配除换行符\n和回车符之外的任何单个字符,等效于**[^\n\r]**
\d 匹配一个数字字符,等效于[0-9]
\D [^0-9]
\w 等效于[a-zA-Z0-9]
\W [^a-zA-Z0-9_]
\s 匹配任何Unicode空白字符,包括空格、制表符、换页符等,等效于[\f\t\n\r]
\S [^\f\t\n\r]

(2)特殊符号说明

[]

用法:匹配[]之中的某一个字符。

​ 例如:[0-9] 查找0-9之中任意一个字符,[abc]匹配a,b,c之中一个字符

^

反义字符

[ ^abc]匹配除了abc之外的字符

边界符

^表示匹配开始的字符 /^abc/

$

表示匹配结束位置的字符 /abc$/

*

>=0次

+

≥1 次

0或1次

{n}

n 次

{n,}

≥n 次

{n,m}

n到m 次

5、贪婪模式

默认为贪婪模式,尽可能匹配多的

非贪婪模式:尽可能匹配少的,在数量前加?改变为非贪婪模式

var str = '123456789';
var reg = /\d{3,6}/g;
console.log(reg.exec(str)); //[ '123456', index: 0, input: '123456789', groups: undefined ]贪婪模式

var reg2 = /\d{3,6}?/g
console.log(reg2.exec(str)); //[ '123', index: 0, input: '123456789', groups: undefined ]贪婪模式

6、选择、分组、引用

(1)选择

使用|来进行选择 找到组内对应的某一个就返回

var reg = /html|css|js/
console.log(reg.exec('abchtmlcss')); // html

(2)分组

使用()来进行分组

var reg = /aaa/
var reg2 = /(a){3}/
//reg 和 reg2 效果相同

(3)引用

使用RegExp.$来捕获分组内的内容

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

var date = '2021-08-29'

reg.test(date)
// 捕获之前要先test/exec
console.log(RegExp.$1); //2021
console.log(RegExp.$2); //08
console.log(RegExp.$3); //29
var reg = /(\w{3}) is \1/ //\1代表捕获第一个分组内的内容
console.log(reg.test('aaa is aaa')); // true
console.log(reg.test('baa is baa')); // true
console.log(reg.test('abb is aaa')); // false
console.log(reg.test('aba is bab')); // false

7、前瞻表达式

(?=exp) 正向前瞻 匹配后面满足表达式exp的位置

var str = 'Hello, Hi, Hi.';
// 后面一定要匹配什么
var reg = /H(?=i)/g;
var newStr = str.replace(reg, "T");
console.log(newStr);//Hello, Ti,Ti.

二、正则表达式调用

1、exec

var str = 'hello world hello';
var reg = /hello/g;
console.log(reg.exec(str))
//返回[ 'hello', index: 0, input: 'hello world hello', groups: undefined ]
匹配成功

返回一个数组 [匹配内容,index:匹配的起始位置,input:要匹配的字符串, group:undefined]

匹配失败

返回null

2、test

测试待检测的字符串是或否能匹配到,匹配到返回true,否则返回false

var str = 'hello world hello';
var reg = /hello/;//匹配hello
console.log(str.test(str))//返回true

3、lastIndex

没设置全局匹配,返回值都为0;

​ 设置全局匹配后,匹配到对于字符lastIndex指向改字符的结束位置,在执行exec返回null时lastIndex归零。

var str = 'a a a'
var reg1 = /a/;
var reg2 = /a/g;

console.log(reg1.lastIndex);  // 0
console.log(reg1.exec(str));  // 返回第一个a
console.log(reg1.lastIndex);  // 0

console.log(reg2.lastIndex);  // 0
console.log(reg2.exec(str));  // 返回第一个a
console.log(reg2.lastIndex);  // 1

console.log(reg2.lastIndex);  // 1
console.log(reg2.exec(str));  // 返回第二个a
console.log(reg2.lastIndex);  // 3

console.log(reg2.lastIndex);  // 3
console.log(reg2.exec(str));  // 返回第三个a
console.log(reg2.lastIndex);  // 5

console.log(reg2.exec(str));  //返回 null

console.log(reg2.lastIndex);  // 0
console.log(reg2.exec(str));  // 返回第一个a

4、String方法在正则表达式中的使用

(1)search

有则返回第一次出现的索引,否则返回-1

var str = 'hello';
var reg = /[hello]/;

// exec
console.log(reg.exec(str));
//返回 [ 'h', index: 0, input: 'hello', groups: undefined ]

// search 返回第一个索引
console.log(str.search(reg));// 0

(2)match

不加全局匹配时和exec一样,加了之后返回查找的字符

var str = 'hello world hello';
var reg1 = /hello/;
var reg2 = /hello/g;

console.log(str.match(reg1));
//[ 'hello', index: 0, input: 'hello world hello', groups: undefined ]
console.log(str.match(reg2));//[ 'hello', 'hello' ]

(3)split

切割字符串

var str = 'add123sum456zhangsan789lisi'
var reg = /\d+/
console.log(str.split(reg));//[ 'add', 'sum', 'zhangsan', 'lisi' ]

(4)replace

替换满足正则表达式的内容

var str = 'Hello123 Hello World Hello javascript123'
// 如果开启全局模式 则替换所有满足条件的字符
var reg = /\bHello\b/g;
// replace(正则表达式, 要替换的内容)
var result = str.replace(reg, 'java');
console.log(result); //Hello123 java World java javascript123
console.log(str); //Hello123 Hello World Hello javascript123

5、使用示例

//验证数字
^[0-9]*$

//验证n位的数字
^\d{n}$

//验证至少n位数字
^\d{n,}$

//验证m-n位的数字
^\d{m,n}$

//验证零和非零开头的数字
^(0|[1-9][0-9]*)$

//验证有两位小数的正实数
^[0-9]+(.[0-9]{2})?$

//验证有1-3位小数的正实数
^[0-9]+(.[0-9]{1,3})?$

//验证非零的正整数
^\+?[1-9][0-9]*$

//验证非零的负整数
^\-[1-9][0-9]*$

//验证非负整数(正整数 + 0)
 ^\d+$

//验证非正整数(负整数 + 0) 
^((-\d+)|(0+))$

//验证长度为3的字符:
^.{3}$

//验证由26个英文字母组成的字符串
^[A-Za-z]+$

//验证由26个大写英文字母组成的字符串
^[A-Z]+$

//验证由26个小写英文字母组成的字符串
^[a-z]+$

//验证由数字和26个英文字母组成的字符串
^[A-Za-z0-9]+$

//验证由数字、26个英文字母或者下划线组成的字符串
^\w+$

//验证用户密码,正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
^[a-zA-Z]\w{5,17}$ 

//验证是否含有 ^%&',;=?$\" 等字符
[^%&',;=?$\x22]+

//验证汉字
^[\u4e00-\u9fa5],{0,}$

//验证Email地址
/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/
//验证InternetURL
^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$

//验证电话号码
//正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:

//验证身份证号(15位或18位数字)
^\d{15}|\d{}18$

//验证一年的12个月
^(0?[1-9]|1[0-2])$ //正确格式为:“01”-“09”和“1”“12”

//验证一个月的31天
^((0?[1-9])|((1|2)[0-9])|30|31)$ //正确格式为:01、09和1、31。

//整数
^-?\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+)?))$

//负浮点数 
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

//浮点数 
^(-?\d+)(\.\d+)?$



相关推荐

一、script标签属性 async 表示立即下载该脚本,但不妨碍页面中的其他操作,只对外部文件有效。 charset 与src属性一起使用,告诉浏览器用来编码这个javascript程序的

ECMAscript 5添加了第二种运行模式:严格模式(strict mode)。 //针对单个脚本 <script>   "use strict";   console.log("这是严格模式

Javascript中, !表示运算符"非", 如果变量不是布尔类型, 会将变量自动转化为布尔类型

// 数字 /\d/.test(value) // 小写 /[a-z]/.test(value) // 大写 /[A-Z]

一、基本用法 Object.assign方法用于对象的合并,将源对象的所有可枚举属性复制目标对象。 <

一、window对象 在javascript中,一个浏览器窗口就是一个window对象,window对象以及这些子对象,由于都是用于操作浏览器窗口,所以我们又称为BOM(Browser Object

Math.random()方法会返回介于0(包含)~1(不包含)之间的一个随机数。 舍掉小数点后的数值的方法有很多,如parseInt(),Math.ceil(),Math.flo

一、概述 所有语言中的代理,其本实现的是对原对象的操作的拦截和一些自定义行为。 二、语法  const p = new Proxy(target, handler) 1、target 可以是任何类型的

一、概述 函数实际上是对象,每个函数都是Function类型的实例,而且与其他引用类型一样具有属性和方法,因此函数名实际上也是一个指向函数对象的指针,因为函数名是指针,所以js没有函数重载。 func

navigator.language 属性返回一个表示浏览器当前语言环境的字符串,通常是一个 BCP 47 语言标签。这个语言标签由两个部分组成:语言代码和可选的地区代码。 下面是一个示例代码,展示了