正则表达式--简单模式
发布日期:2021-10-01 08:44:40 浏览次数:2 分类:技术文章

本文共 2495 字,大约阅读时间需要 8 分钟。

    作者:
    正则表达式除了用来匹配一些特殊字符外,还有许多其他的作用。Metacharacters,character classes和quantifiers都是正则表达式语法中的重要组成部分,可以用来实现更强大的功能。 
    Metacharacters
    正则表达式的Metacharacters主要包括:
    ([{\^$|)?*+.
    当需要使用这些符号的时候,需要在前面加上一个反斜杠"\",例如:
var
 reg 
=
 
/
\
?/
;
var
 reg 
=
 
new
 RegExp(
"
\\?
"
);
    一个字符的表示可以使用它的文字符号,也可以使用ASCII码或Unicode码来代码它。例如,当一个字符使用ASCII码表示的时候,我们需要在一个两位十六进制的编码前加上"\x"。
var
 name 
=
 
"
apple
"
;
var
 regName 
=
 
/
\x61
/
;
alert(regName.test(name));  
//
输出"true"
    当然,使用十进制来表示字母a。
var
 reg 
=
 
/
\
141
/
;
    使用Unicode来表示一个字符,需要四位十六进制的编码,例如\u0062代表b。
var
 s 
=
 
"
big
"
;
var
 reg 
=
 
/
\u0062
/
;
alert(reg.test(s));  
//
输出为"true"
    下面一段代码可以到达同样的效果:
var
 s 
=
 
"
big
"
;
var
 reg 
=
 
new
 RegExp(
"
\\u0062
"
);
alert(reg.test(s));  
//
输出为"true"
    另外,有一些预定义好的特殊字符,用来表示特殊的含义。如:“\t,\n,\r,\f,\a,\e,\cX,\b,\v,\0”。
//
将用户输入的新一行的所有字符都删除
var
 str 
=
 strWithNewLines.replace(
/
\n
/
g, 
""
);
   
Character classes
 
    Character classer代表着需要匹配的一组字符,将需要匹配的字符放在一对中括号里,正则表达式将能有效的识别第一个字符,第二个字符,等等。
   
Simple classes
    如果需要同时匹配"pig"和"big",可以使用simple character class来实现:
var
 str 
=
 
"
pig, big
"
;
var
 reg 
=
 
/
[pb]ig
/
gi;
var
 arr 
=
 str.match(reg);
    此时,arr中的数据包括"pig"和"big"。当然,使用ASCII或Unicode来表示p或b同样可行。
   
Negation classes
    有时我们需要匹配除了少数几个字符外的所有字符,在这种情况下,我们可以使用negation class来进行匹配。例如,匹配除了a和b之外所有的字符,可以表示为[^ab]。在上一个例子中,将reg表示为/[^p]ig/gi,则结果中将过滤掉pig。
   
Range classes
    顾名思义,range class就是用来指定某个范围的匹配字符,例如从a到z可以表示为[a-z],从1到10可以表示为[1-10]。如果将range class指定的字符排除在外,可以使用[^1-10],表示除了1到10范围外的所有字符。
   
Combination classes
    举一个例子就清楚了,现在需要匹配从1到10,从a到g,并且加上新一行的所有字符,可以表示为[1-10a-g\n]。
注意,在[]里不允许再嵌套[]
  
   
Predefined classes
    因为有许多样式都不停在重复使用,因此一组预定义好的character classes可以用来简化一些比较复杂的类型。具体的可以参考相关资料,下面举个简单的例子:
  
var
 str 
=
 
"
8743 apple
"
;
var
 reg 
=
 
/
[
0
-
9
][
0
-
9
][
0
-
9
]
/
;
alert(reg.test(str));  
//
输出为"true"
  
    使用predefined class可以写成:
var
 str 
=
 
"
8743 apple
"
;
var
 reg 
=
 
/
\d\d\d
/
;
alert(reg.test(str));  
//
输出为"true"
   
Quantifiers
 
    Quantifiers能够指定某种匹配方式需要进行多少次,包括指定确定的次数,或不确定的次数如至少多少次。
   
Simple quantifiers
    下面列表中,指定了某种模式需要重复进行的次数,部分符号和闭包的意义一样:

simple quantifiers.gif

    例如var reg = /b?read/就可以表示bread或read。
  
   
三种正则表达式的quantifiers
    Greedy quantifier: 对一个目标串进行匹配搜索,当在目标串中没有相匹配的字符串时,就删去目标串的最后一个字符,再次进行匹配,如果没有发现则再删去最后一个字符,依此类推,最后的结果要么已经将字符匹配上,要么目标串已经为空。
    Reluctant quantifier: 和greedy quantifier搜索风格相反。Reluctant quantifier从目标串的第一个字符开始对目标串进行搜索,当没有匹配时,给目标串加上一个字符,再次进行搜索,依此类推,直到在目标串上匹配成功,或整个目标串都被搜索但仍然没有完成匹配。
    Possessive quantifier: 直接对整个目标串进行匹配,要么匹配上,要么匹配失败,它只进行一次匹配。
    那么如何判断这三种不同的quantifiers呢?主要就是根据问号(?)星号(*)和加号(+)的组合来判断的,如下表所示。
three quantifiers.gif
   
需要注意的是,possessive quantifier在目前主流的浏览器中都不被支持,IE和Opera在碰到possessive quantifier时将会抛出异常,Mozilla虽然不会发生错误,但会将它作为greedy quantifier来对待。
   
相关链接:

转载地址:https://blog.csdn.net/iteye_263/article/details/81396852 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:正则表达式--简单模式
下一篇:组装电脑与品牌机

发表评论

最新留言

很好
[***.229.124.182]2024年03月12日 13时26分43秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mysql in 有序_mysql中的in排序 mysql按in中顺序来排序 2021-06-24
mysql 行转列 显示_mysql 行转列 (结果集以坐标显示) 2021-06-24
由于连接方在一段时间后没有正确答复或连接的主机_新风换气机使用效果不佳,为何?掌握正确使用方法就好了... 2021-06-24
mysql 查询姓王_MySQL查询语句练习题,测试足够用了 2021-06-24
mysql多实例脚本_mysql多实例脚本 2021-06-24
python如何生成excel文件夹_用python脚本通过excel生成文件夹树结构 2021-06-24
python获取post请求中的所有参数_Django从POST reques获取请求参数 2021-06-24
mysql加密复制_MySQL主从复制使用SSL加密 2021-06-24
python启动远端 exe_python打包exe开机自动启动的实例(windows) 2021-06-24
java当前路径_java获取当前路径的几种方法 2021-06-24
java web传递参数_Javaweb的八种传值方式 2021-06-24
java gui支持的包有哪两个_Java GUI 2021-06-24
java list详解_java集合List解析 2019-04-21
java坐标代码_java实现计算地理坐标之间的距离 2019-04-21
kettle调用java程序_Kettle ETL调用 java代码来进行数据库的增删改查 2019-04-21
mysql 取两个时间差 php_在php和MySql中计算时间差的方法详解 2019-04-21
mysql 重启数据库实例_mysql 单机多实例重启数据库服务 2019-04-21
collator java_Java Collator getInstance(Locale)用法及代码示例 2019-04-21
dtc mysql_DTCC归来-高可用可扩展数据库架构探讨 2019-04-21
java怎样将日期本土化_Java中的日期操作 2019-04-21