我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何理解JavaScript正则表达式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何理解JavaScript正则表达式

如何理解JavaScript正则表达式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、正则表达式创建

var reg = /test/;

var reg = new RegExp('test');

正则表达式的exec方法

var reg = /test/;

var str = 'testrjf';

var res = reg.exec(str);

//会匹配str里面test内容,有就返回匹配的该内容,没有返回null

console.log(res);//数组形式保存test

二、正则表达式模式

这里写一个方法方便后面演示

function execReg(reg,str){

var result = reg.exec(str);

console.log(result);

}1.一片两片三四片,落尽正则全不见{n},{n-1,n},{1,}。

reg = /c{1}/;//匹配一个c

str='cainiao';

execReg(reg,str);//返回c

reg = /c{2}/;//匹配两个连续的c,{n}同理

str1='ccaniao';

str2='cacniao';

execReg(reg,str1);//返回cc

execReg(reg,str2);//返回null,没有两个连续cc

reg = /c{3,4}/;//匹配3个或4连续的c

str1='cccTest';

str2='ccccTest';

execReg(reg,str1);//返回ccc

execReg(reg,str2);//返回cccc。(正则会尽量多的匹配)

reg = /c{1,}/;//匹配1个以上的c。{2,}{3,}...同理

str1='cccTest';

str2='chjjk';

execReg(reg,str1);//返回ccc

execReg(reg,str2);//返回c

reg='/c*/和等同于reg='/c{0,}/

reg='/c+/和等同于reg='/c{1,}/

reg='/c?/和等同于reg='/c{0,1}/

这里在提示一下,正则表达式会尽可能匹配多的目标返回,有4个就不会返回3个

/^开头,结尾$/

^开头

reg = /^c/;//^表示只匹配字符串的开头

str1='维生素c';

str2='cainiao';

execReg(reg,str1);//结果为null,因为字符串‘外汇分析师’的开头并不是c

execReg(reg,str2);//这次则返回c

结尾$

reg = /c$/;//$匹配字符串结尾的字符

str1='cainiao';

str2='维生素c';

execReg(reg,str1);//返回null

execReg(reg,str2);//返回c

点“.”

reg = /./;//'.'会匹配字符串中除了换行符\n之外的所有字符

str1='cainiao';

str2='bainiao';

execReg(reg,str1);//正则匹配到了字符c

execReg(reg,str2);//正则匹配到了字符b

reg = /.+/;

str1='blueidea—经典论坛  好_。';

str2='bbs.blueidea.com';

str3='\ncainiao';

execReg(reg,str1);

//返回'blueidea—经典论坛  好_。'所有的字符都被匹配到了

execReg(reg,str2);//返回'bbs.blueidea.com'

execReg(reg,str3);//返回null

或“|“

reg = /b|c/;

str1='blueidea';

str2='cainiao';

execReg(reg,str1);//返回b

execReg(reg,str2);//返回c

reg = /^b|c.+/;

str='cainiao';

execReg(reg,str);//返回cainiao,理解成开头b|c然后.+

reg = /^b|c.+/;

str='bbs.blueidea.com';

execReg(reg,str);//返回b,这里看成开头的b或者是c.+

括号

reg = /^(b|c).+/;

str='bbs.blueidea.com';

execReg(reg,str);//此时才是开头b|c,然后.+

//回的结果后面多出来一个“,b“,这是()内的b|c所匹配的内容。

//我们在正则表达式内括号里写的内容会被认为是子正则表达式,所匹配的结果也会被记录下来供后面使用。我们暂且不去理会这个特性。

字符集合[abc]

reg = /^[abc]/;//[abc]表示a或者b或者c中的任意一个字符

str='bbs.blueidea.com';

execReg(reg,str);//返回b

reg = /^[a-zA-Z][a-zA-Z0-9_]+/;//先^[a-zA-Z],后[a-zA-Z0-9_]+

str='test';

execReg(reg,str);//返回test

反字符集合[^abc]

reg = /[^abc]/;

str='blueidea';

execReg(reg,str);//返回l(即第一个b没有匹配)

即:[^0-9] 表示非数字,[^a-z] 表示非小写字母…

边界与非边界

\b表示的边界的意思

reg = /\bc/;//表示字符串开始的c或者是结尾的c

str1='cainiao';

str2='维生素c';

execReg(reg,str1);//返回c,左边界的c

execReg(reg,str2);//返回c,右边界的c

\B表示非边界

reg = /\Bc/;//表示字符串除了开始(结尾)的c

str='aicniao';

execReg(reg,str);//返回c,中间的c

数字与非数字

\d表示数字的意思

reg = /\d/;

str='cainiao8';

execReg(reg,str);//返回8

\D表示非数字的意思

reg = /\d/;

str='cainiao8';

execReg(reg,str);//返回c

空白

\f匹配换页符,\n匹配换行符,\r匹配回车,\t匹配制表符,\v匹配垂直制表符。

\s匹配单个空格,等同于[\f\n\r\t\v]。

reg = /\s.+/;

str='This is a test  String.';

execReg(reg,str);//返回'is a test  String.',匹配第一个空格以及其后的所有非换行字符。

\S表示非空格字符。

reg = /\S+/;

str='This is a test  String.';

execReg(reg,str);//This,当遇到第一个空格之后,正则就停止匹配

单词字符

\w表示单词字符,等同于字符集合[a-zA-Z0-9_]。

reg = /\w+/;

str='.blueidea';

execReg(reg,str);//blueidea

\W表示非单词字符,等效于[^a-zA-Z0-9_]。

reg = /\W+/;

str='中文如何?';

execReg(reg,str);//'中文如何?'

反向引用

reg = /(\w)\1/;

str1='blueidea';

str2='bblueidea';

execReg(reg,str1);//返回null

execReg(reg,str2);//bb

//这里的“\1”就叫做反向引用,它表示的是第一个括号内的字正则表达式匹配的内容。

//在上面的例子中,第一个括号(\w)匹配了b,“\1”就同样表示b了,在余下的字符串里自然找不到b了。

不记录子正则表达式的匹配结果

使用形如(?:pattern)的正则就可以避免保存括号内的匹配结果

reg = /^(?:b|c).+/;

str='bbs.blueidea.com';

execReg(reg,str);//返回bbs.blueidea.com

//前面提到的括号里子表达式不被保存

正向预查

形式:(?=pattern),即要匹配的字符串,后面必须紧跟着pattern!

reg = /cainiao(?=8)/;//只是后面必须跟着8,但结果不匹配8

str1='cainiao9';

str2='cainiao8';

execReg(reg,str1);//返回null

execReg(reg,str2);//返回cainiao

形式:(?!pattern)和?=恰好相反,要求字符串的后面不能紧跟着某个pattern

reg = /cainiao(?!8)/;

str1='cainiao9';

str2='cainiao8';

execReg(reg,str1);//返回cainiao

execReg(reg,str2);//返回null

匹配元字符

*,+,?之类的符号,它们在正则表达式中都有一定的特殊含义,类似这些有特殊功能的字符都叫做元字符。那我们想匹配’c?'这种字符串呢?

reg = /c\?/;

str='c?';

execReg(reg,str);//返回'c?'

三、正则表达式修饰符

i: 执行对大小写不敏感的匹配。

var reg = /b/;

var str = 'BBS';

execReg(reg,str);//返回null

var reg = /b/i;

var str = 'BBS';

execReg(reg,str);//B

g: 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)

在后面进行讲解

m: 执行多行匹配。

reg = /^b/;

str = 'test\nbbs';//有换行

execReg(reg,str);//null

reg = /^b/m;

str = 'test\nbbs';

execReg(reg,str);//返回b,换行后第二行b开头

四、正则表达式方法

exec方法

exec方法返回的其实并不是匹配结果字符串,而是一个对象,简单地修改一下execReg函数,来做一个实验就可以印证这一点。

function  execReg(reg,str){

var result =  reg.exec(str);

console.log(typeof result);

reg = /b/;

str='bbs.bblueidea.com';

execReg(reg,str);

//显示result的类型是object。而且是一个类似数组的对象。

其中属性:index input  0。其中index是表示匹配在原字符串中的索引;而input则是表示输入的字符串;至于0则是表示只有一个匹配结果,可以用下标0来引用这个匹配结果,这个数量可能改变。我们可以通过返回值的length属性来得知匹配结果的总数量。

然后修改execReg函数

function  execReg(reg,str){

var result =  reg.exec(str);

console.log('index:'+result.index+'\n'+'input:'+result.input+'\n');

for(i=0;i<1result.length;i++){ style="overflow-wrap: break-word" p=""

console.log('result['+i+']:'+result[i]+'\n');

reg  = /\w/;

str='bbs.bblueidea.com';

execReg(reg,str);

看完上述内容,你们掌握如何理解JavaScript正则表达式的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何理解JavaScript正则表达式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何理解JavaScript正则表达式

如何理解JavaScript正则表达式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、正则表达式创建1.var reg = /test/;2.var reg = new Re
2023-06-02

JavaScript高级正则表达式如何理解

这篇文章将为大家详细讲解有关JavaScript高级正则表达式如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JavaScript高级正则表达式1.正则表达式概述1.1什么是正则表达式
2023-06-26

怎样理解JavaScript 正则表达式

今天就跟大家聊聊有关怎样理解JavaScript 正则表达式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 正则表达式创建JavaScript 有两种方式创建正则表达式:第一种:
2023-06-25

JavaScript如何使用正则表达式

正则表达式是一种用来匹配字符串的模式,可以用于验证、搜索、替换字符串等。JavaScript内置支持正则表达式,本篇文章将介绍JavaScript如何使用正则表达式。正则表达式比较复杂,如果您初次接触它,可能会感到困惑。但是只要您理解了基本语法和常见功能,就可以使用它来解决复杂的字符串匹配和替换问题。一、正则表达式的基本语法正则表达式由一系列字符和元字符组成,元字符用于指定匹配
2023-05-14

如何理解Python的正则表达式

今天就跟大家聊聊有关如何理解Python的正则表达式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python正则表达式!前面也有跟大家分享关于正则表达式的Python学习教程,但是
2023-06-02

理解python正则表达式

在python中,对正则表达式的支持是通过re模块来支持的。使用re的步骤是先把表达式字符串编译成pattern实例,然后在使用pattern去匹配文本获取结果。 其实也有另外一种方式,就是直接使用re模块的方法,但是这样就不能使用编译后的
2022-06-04

如何理解PHP正则表达式函数库

如何理解PHP正则表达式函数库,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。浅析PHP正则表达式函数库是什么呢?这里向你介绍了PHP正则表达式函数库(POSIX
2023-06-17

JavaScript RegExp(正则表达式) 对象

JavaScript RegExp(正则表达式) 对象正则表达式是描述字符模式的对象。正则表达式用于在文本上执行模式匹配和“搜索和替换”功能。var patt = /JC2182/i示例说明: /JC2182/i - 是一个正则表达式
2023-06-03

C#正则表达式怎么理解

这篇文章主要讲解了“C#正则表达式怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#正则表达式怎么理解”吧!到目前为止,许多的编程语言和工具都包含对正则表达式的支持,当然.NET也不
2023-06-17

Python中使用正则表达式及正则表达式匹配规则详解

这篇文章主要介绍了Python中使用正则表达式以及正则表达式匹配规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录