元字符是使用正则表达式不同于普通字符的地方,也是正则表达式能够发挥强大作用、具有强大表达能力的法宝。那么什么是元字符呢?元字符是一些在正则表达式中有特殊用途、不代表它本身字符意义的一组字符。利用元字符,我们可以控制字符串匹配的方式,例如:只在每一行的开始或结束位置匹配指定的模式,匹配固定距离的子串,匹配不出现的字符等等。

如果要在正则表达式中使用元字符本身的意义,例如:如果想搜索字符串中的?,那么需要对元字符进行转义,使用的方法是把一个反斜杠(\)放在元字符前面,这样元字符就失去了器特殊的意义,还原会它本身代表的字符意义。在JavaScript中需要进行转义的元字符有:

/** 需要进行转义的元字符 **/
. * + ( ) $ / \ ? [ ] ^ { } - ! < >

当我们看到在正则表达式中某个元字符前面放置了一个反斜杠时,就表示反斜杠去掉了元字符的特殊意义,使字符代表其本身的含义。但是如果在某个正则表达式中看到字母数字前面有一个反斜杠时,这样的反斜杠用于创建元符号。元符号提供了某些正则表达式元字符的简写方式。例如:[0-9]表示0-9之间的数字,可以使用元符号\d来表示。

正则表达式元字符、元符号分类列表

我们在下面的表格中列出了JavaScript支持的元字符和元符号。

表1:特殊字符

\n \f \xhh \cchar
元字符 含义
\0 匹配null字符,对应的十六进制值为\x00
\b 匹配退格字符,对应的十六进制值为\x08
匹配换行字符,对应的十六进制值为\x0A
\r 匹配回车字符,对应的十六进制值为\x0D
匹配换页字符,对应的十六进制值为\x0C
\t 匹配制表(TAB)字符,同时对应于水平制表符\x09和垂直制表符\x0B
匹配用2个十六进制数字表示的字符
\uhhhh 匹配用4个十六进制在数字表示的字符,这些字符是Unicode字符
匹配命名的控制字符

提示:特殊字符是指那些不容易进行直接书面表达或不容易直接使用键盘输入的字符。

表2:字符类

元字符或元符号 [...] 匹配列表中给出的任何字符。该列表可以是一个字符,也可以是多个字符,还可以是使用“-”表示的字符范围。例如[a]表示匹配单个字母a,[ab]表示匹配字母a或字母b,[a-z]表示匹配任何一个小写字母,[0-9]表示匹配任何单个的数字,[a-z0-9]表示匹配任何单个的小写字母或数字,等等 [^...] 匹配列表中没有给出的任何单个字符。该元字符与[...]的意义刚好相反。例如:[^a]表示匹配任何不是字母a的字符,[^ab]表示任何不是字母a或字母b的字符,[^a-z]表示任何不是小写字母的任何字符,等等 . 匹配除了回车和换行符之外的任何字符 \w 元符号,相当于[a-zA-Z0-9_],匹配任何字母、数字、下划线字符,这样的字符也称为单词字符 \W 元符号,相当于[^a-zA-Z0-9_],匹配除了字母、数字、下划线字符之外的任何字符 \d 元符号,相当于[0-9],匹配任何单个的数字字符 \D 元符号,相当于[^0-9],匹配除了数字之外的任何单个字符 \s 元符号,匹配空白字符,空白字符是指空格、Tab字符和回车换行符 \S 元字符,匹配任何非空白字符

表3:定位元字符

元字符 ^ 匹配字符串的开始位置,或多行匹配模式中(\m)每一行的开始位置 $ 匹配字符串的结束位置,或多行匹配模式下(\m)每一行的结束位置 匹配单词边界。这个元字符用于单词匹配。单词边界有4种形式:
1、当字符串第一个字符是单词字符时,位于第一个字符前面;
2、当字符串最后一个字符是单词字符时,位于最后一个字符后面;
3、在单词字符和非单词字符之间,紧跟在单词字符后面;
4、在非单词字符和单词字符之间,紧跟在非单词字符后面 \B 匹配非单词边界,这个元字符匹配\b不匹配的每一个位置 x(?=y) 正向前查匹配。也就是说,只有在x后面跟上y时,才匹配x成功。例如:使用正则表达式/Hello(?=World)/进行匹配时,只有Hello后面跟着World时匹配才算成功,所以,这个正则表达式匹配HelloWorld,但是不匹配Hello,也不匹配Hello123 x(?!y) 反向前查匹配。只有在x后面不跟着y时,才匹配x成功。例如:在使用正则表达式/Hello(?!World)/进行匹配时,只有Hello后面不跟着World时才匹配成功。所以这个正则表达式匹配Hello,也匹配Hello123(同时也匹配里面的Hello),但是不匹配HelloWorld

表4:模式修饰符

g 进行全局匹配 m 多行匹配 i 不区分大小写匹配

表5:限定符

x? 匹配0个或1个x。例如:/ab?/匹配a、ab、ac、abc,但是不匹配bc x+ 匹配1个或多个x。例如:/ab+/匹配ab、abb、abbbc,但是不匹配a、ac x* 匹配0个或多个x。例如:/ab*/匹配a、ab、abb、abbbc,但是不匹配bc x{n} 匹配n个x。例如:/a{3}/匹配aaa、aaac,但是不匹配aa、a、abc x{n,} 匹配n个或多个x。例如:/a{3,}/匹配aaa、aaaa,但是不匹配aa、a、abc 匹配n到m个x。例如:/a[2,4]/匹配aa、aaa、aaaa,但是不匹配a、aaaaa

贪婪匹配原则

在JavaScript中,正则表达式进行匹配时默认使用的是贪婪匹配原则,即尽可能多的匹配字符串。例如,使用正则表达式/1{3,4}/来匹配字符串1111111,得到的结果为:1111和111。即先匹配4个字符,然后才匹配3个字符。

表6:分组和替换元字符

x|y 匹配x或y,例如:/cat|dog/匹配cat或dog (sub) 反向引用,将子表达式sub作为一个整体处理,括号的作用相当于代数中括号的作用。并将捕获的子匹配保存在\1,\2,......和$1,$2,......中。例如:/a(bc)+/中,加号元字符作用在子表达式bc上,它匹配abc、abcbc,但是不匹配a和ac (?:sub) 分组子模式,但是不捕获子模式。它的作用与(sub)类似,称为无记忆匹配 \1,\2,\3,... 在正则表达式中,分别包含与正则表达式中第一个反向引用、第二个反向引用、第三个反向引用...相匹配的子串 $1,$2,$3,221)"> 在替换中,分别包含与正则表达式中第一个反向引用、第二个反向引用。第三个反向引用...相匹配的子串

关于子表达式、捕获和反向引用的概念,我们来看下面的例子:假设我们现在要找出所有4个连在一起的数字的子串,并且这4个数字要满足:1、第一位与第四位相同,2、第二位与第三位相同,例如1221和5885,那么,正则表达式应该像下面的样子:

var regex = /(\d)(\d)\2\1/gi;

关于上面的正则表达式,我们使用下图来进行说明:

每使用一次()元字符,JS中的正则表达式就会进行一次反向引用,第一个()中的反向引用保存在\1元字符中,当我们要再次使用这个引用时,直接使用\1就可以了。其它的反向引用以此类推。

下一篇文章中我们将列举一些实际使用正则表达式元字符的例子。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


正则替换html代码中img标签的src值
正则替换html代码中img标签的src值在开发富文本信息在移动端展示的项目中,难免会遇到后台返回的标签文本信息中img标签src属性按照相对或者绝对路径返回的形式,类似:<img src="qinhancity/v1.0.0/ima
【C++】正则表达式
正则表达式
shell之三剑客awk基础用法
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描,过滤,统计汇总等工作,数据可以来自标准输入也可以是管道或文件。当读到第一行时,匹配条件,然后执行指定动作,在接着读取第二行数据处理,不会默认输出。如果没有定义匹配条件,则是默认匹配所有数据行,awk隐含循环,条件匹配多少次,动作就会执行多少次。逐行读取文本,默认以空格或tab键为分割符进行分割,将分割所得的各个字段,保存到内建变量中,并按模式或或条件执行编辑命令。与sed工作原理相比:s
Python基础知识进阶之正则表达式
Python界一名小学生,热心分享编程学习。
开发者神器,代码文档终于有救了
收集整理每周优质开发者内容,包括、、等方面。每周五定期发布,同步更新到和。欢迎大家投稿,,推荐或者自荐开源项目/资源/工具/文章~
Shell编程从看懂到看开③(函数、echo、printf、test)
本文涉及Shell函数,Shell中的echo、printf、test命令等。
Python正则表达式(持续更新,各种字符串筛选,总有一款适合您当前的功能)
一、python【re】的用法1、re.match函数·单一匹配-推荐指数【★★】2、re.search函数·单一匹配-推荐指数【★★★★★】3、re.findall函数·多项匹配-推荐指数【★★★★★】4、re.finditer函数·多项匹配-推荐指数【★★★★】5、re.sub函数·替换函数-推荐指数【★★★★】二、正则表达式示例·总有一款适合你1、正则表达式匹配HTML指定id/class的标签2、正则表达式匹配HTML中所有a标签中的各类属性值3、获取标签的文本值
编译原理 实验一:词法分析器的自动实现(Lex词法分析)
1.借助词法分析工具Flex或Lex完成(参考网络资源)2.输入:高级语言源代码(如helloworld.c)3.输出:以二元组表示的单词符号序列。通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。由于各种不同的高级程序语言中单词总体结构大致相同,基本上都可用一组正则表达式描述,所以构造这样的自动生成系统:只要给出某高级语言各类单词词法结构的一组正则表达式以及识别各类单词时词法分析程序应采取的语义动作,该系统
  • • 正则替换html代码中img标签的src值
  • • 【C++】正则表达式
  • • shell之三剑客awk基础用法
  • • 正则表达式
  • • Python基础知识进阶之正则表达式
  • • 开发者神器,代码文档终于有救了
  • • Shell编程从看懂到看开③(函数、echo、…
  • • 正则表达式常用最新版
  • • Python正则表达式(持续更新,各种字符串…
  • • 编译原理 实验一:词法分析器的自动实现…
  • • 一文让你彻底搞懂js正则表达式
  • • 正则系列之手机号码正则
  • • 正则表达式(全)
  • • 编译原理实验1——词法分析程序设计原理…
  • • 【python】一篇玩转正则表达式
  • • Python Re 正则表达式 数据匹配提取 基…
  • • 正则表达式——详情版+常用表达式
  • • 牛客刷题总结——Python入门08:面向对…

正则表达式-正则表达式的元字符的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. ios – UIColor到十六进制(网页颜色)

    有没有简单的方法将UIColor转换为十六进制值?

  4. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  5. 在Xcode4中,你可以更改用于显示隐形字符的字符吗?

    我更喜欢VisualStudio显示隐形的方式……

  6. ios – 应用程序商店描述特殊字符

    是不是可以在AppStore描述中使用像星星这样的特殊字符了?我得到这个错误:描述不得包含标记语言.说明不得包含以下字符:★提前致谢:)解决方法仍然允许一些unicode字符.以下字符已经过测试并仍然有效:◆√至于现在他们工作正常,但苹果可以随时再次改变条件.

  7. ios – 将数组中的字符转换为整数

    即使我搜索了文档,我似乎无法弄清楚如何做到这一点.我试图弄清楚如何将数组中索引处的字符转换为整数.例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:谢谢您的帮助!解决方法Swift并不容易在原始和类型表示之间进行转换.这是一个在此期间应该有所帮助的扩展:这使您可以非常接近您想要的:对于遇到此问题的任何工程师,请参阅rdar://17494834

  8. ios – 如何在Swift 3中使用正则表达式?

    解决方法我相信.当没有其他选项适用时,将使用.allZeros.因此,使用Swift3,您可以传递一个空的选项列表或省略options参数,因为它默认为无选项:要么请注意,在Swift3中,您不再使用error参数.它现在抛出.

  9. ios – lldb断点在类目标c中的所有方法

    如何使用lldb在ObjectiveC类中的所有方法上自动设置断点?

  10. ios – 创建一个包含n个空格或其他重复字符的字符串

    我想使用Swift使用n个空格进行字符串,但不使用for循环或手动如下所示:解决方法String已经有一个repeating:count:initializer就像Array(和其他采用RangeReplaceableIndexable协议的集合):所以你可以打电话:请注意,重复的参数是一个字符串,而不仅仅是一个字符,因此您可以重复整个序列:编辑:更改为Swift3语法,并删除了关于Swift1类

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部