js正则表达式语法大全_JavaScript正则

js正则表达式语法大全_JavaScript正则JavaScript正则表达式1.构建正则表达式字面量创建varreg=/正则表达式/修饰符构造函数创建varreg=newRegExp(‘正则表达式’,’修饰符’)修饰符​ i:ignoreCase,匹配忽视大小写​ m:multiline,多行匹配​ g:global,全局匹配2.正则表达式调用(实例方法)1.exec​ 匹配字符串和正则表达式的方法,​ 匹配成功:​ 返回一个数组[匹配内容,index:匹配的起始位置,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

JavaScript正则表达式

1. 构建正则表达式

  1. 字面量创建

    var reg = /正则表达式/修饰符
    
  2. 构造函数创建

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

修饰符

​ i: ignoreCase, 匹配忽视大小写

​ m: multiline , 多行匹配

​ g: global , 全局匹配

2. 正则表达式调用(实例方法)

1. exec

​ 匹配字符串和正则表达式的方法,

​ 匹配成功:

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

​ 匹配失败:

​ 返回null

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

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

3. 正则表达式元字符

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

1. []的用法

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

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

var str = 'ab';
var reg = /[abc]/;//匹配abc任意一个字符
var reg1 = /abc/;//匹配abc
console.log(reg.test(str));//返回true
console.log(reg1.test(str));//返回false

2. ^符号的使用

  1. 反义字符

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

    var str = 'ab1';
    var str2 = 'abc';
    var reg1 = /[^abc]/;//匹配abc之外的字符
    console.log(reg.test(str));//返回true
    console.log(reg1.test(str2));//返回false
    
  2. 边界符

    ^表示匹配开始的字符

    var str = 'abc';
    var str1 = '1abc'
    var reg = /^abc/;//匹配以abc开头的字符
    console.log(reg.test(str));//返回true
    console.log(reg.test(str1));//返回false
    

3. $符号的使用

​ 边界符

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

var str = 'abc';
var str1 = '1abc'
var reg = /abc$/;//匹配以abc结尾的字符
console.log(reg.test(str));//返回true
console.log(reg.test(str1));//返回true

^和$共同使用(精确匹配)只有和匹配的字符完全相同才匹配成功

var str = 'abc';
var str1 = '1abc'
var reg = /^abc$/;//匹配以abc结尾的字符
console.log(reg.test(str));//返回true
console.log(reg.test(str1));//返回false

4. 字符匹配出现次数

字符 含义
* >=0次
+ ≥1 次
0或1次
{n} n 次
{n,} ≥n 次
{n,m} n到m 次

使用方式

var str = 'abc abcabc';
var reg = /abc{3}/;//匹配以abc出现三次
console.log(reg.test(str));//返回true

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 效果相同

也可以将分组和选择共同使用

var reg = /I Like (basketball|football|table tennis)/
console.log(reg.test('I Like basketball')); //true
console.log(reg.test('I Like football')); //true
console.log(reg.test('I Like table tennis')); //true
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. String方法在正则表达式中的使用

1. search 使用和exec类似

​ 有则返回第一次出现的索引,否则返回-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

8. 前瞻表达式

由于在js中不支持后瞻表达式,所以不进行了解

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

var str = 'Hello, Hi, Hi.';
// 后面一定要匹配什么
var reg = /H(?=i)/g;
var newStr = str.replace(reg, "T");
console.log(newStr);//Hello, Ti,Ti.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191269.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vim为什么不能打开文件了(vim怎么保存文件)

    vim打开的文件无法使用:wq保存的问题在使用vim编辑一个.c文件的时候,完成使用:wq保存报以下错误网上查了一下,应该是权限问题.一般做法是先退出当前vim,以sudovim进入即可。如果使用ctrl+z命令退出,授予权限之后无法使用fg命令返回vim中E121:无法打开并写入文件解决办法1、使用命令:w!sudotee%保存即可。其中:冒号(:)表示我们处于vim的退出模式;感叹号(!)表示我们正在运行shell命令;sudo和tee都是shell命令;%表示从当前

    2022年4月14日
    63
  • 转录组fpkm是什么意思_fpkm值越大表达量

    转录组fpkm是什么意思_fpkm值越大表达量在转录组测序(RNA-Seq)中,基因的表达量是我们关注的重点。基因表达量的衡量指标有:RPKM、FPKM、TPM。RPKM:ReadsPerKilobaseMillion;说实话,这个英文说

    2022年8月3日
    40
  • java队列(Queue)用法总结[通俗易懂]

    java队列(Queue)用法总结[通俗易懂]1.队列的特点队列是一种比较特殊的线性结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中最先插入的元素也将最先被删除,对应的最后插入的元素将最后被删除。因此队列又称为“先进先出”(FIFO—firstinfirstout)的线性表,与栈(FILO-firstinlastout)刚好相反…

    2022年7月14日
    20
  • 网线RJ45接口排线示意图(做网线备用)「建议收藏」

    网线RJ45接口排线示意图(做网线备用)「建议收藏」网线RJ45接口排线示意图(做网线备用)RJ45有两种绕线方式,T-568A和T-568B。注意:绝大多数设备用的都是T-568B!!!请参照T-568B的线序!!!我的热门文章推荐多路视频直播用在线云导播切换的效果测试 如何把视频转换生成二维码,扫码直接播放? 有哪些网站上传视频是不会插入广告的? 怎么把视频生成二维码?微信扫二维码就可以观看?不要广告的 常用照片尺寸对照表,照片大小看这个表就对了 视频直播推流攻略(整理的各大平台推流界面) html5视频倍.

    2022年9月17日
    7
  • 详细设计的工具——PAD图[通俗易懂]

    详细设计的工具——PAD图[通俗易懂]目录一、PAD图的概念二、PAD图的基本符号三、PAD图的优点四、PAD图的应用一、PAD图的概念PAD图(ProblemAnalysisDiagram),由日本日立公司1973年发明以后,已得到一定程度的推广。它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。它既克服了传统的流程图不能清晰表现程序结构的缺点,又不像N-S图那样受到把全部程序约束在一个方框内的限制,这就是其优势所在。二、PAD图的基本符号(a)顺序;(b)选择;(c)C

    2022年8月13日
    3
  • svn用户名和密码设置_git配置本地用户名密码

    svn用户名和密码设置_git配置本地用户名密码SVN配置用户192.168.1.200   Administrator     ydd!@#$1234()90 1、备份D:\svn\conf\authz,再修改2、备份D:\svn\conf\passwd,再修改注意:* 权限配置文件中出现的用户名必须已在用户配置文件中定义。* 对权限配置文件的修改立即生效,不必重启s

    2022年9月13日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号