码迷,mamicode.com
首页 > 其他好文 > 详细

外文翻译——正则表达式(7)——量词+, * 和?

时间:2016-08-04 13:30:00      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

量词+, * 和?

一些被广泛使用的缩写量词"+","*"和"?"。

基本上,它们都是数量词的简写:

"+"

  表示“大于等于一个”,等同于"{1,}"。

  例如:"\d+"匹配一个任意长度的数字: 1 showMatch( "number 12345", /\d+/ ) // 12345 

"?"

  表示“零个或一个”,等同于"{0,1}"。它让一个字符变成可选的。

  例如:"ou?nd"可以匹配"second"中的"ond",以及"secound"中的"ound"。

  1 showMatch( "second", /secou?nd/ )  // "second"
  2 showMatch( "secound", /secou?nd/ )  // "secound", both variants match

"*"

  表示“零个或多个”,等同于"{0,}"。一个字符可能会重复多次,亦或压根就不存在。

  下例匹配一个后面跟了零个或多个"0"的数字。

1 showMatch( "100 10 1", /\d0*/g ) // 100, 10, 1

和"+"(一个或多个)对比:

1 showMatch( "100 10 1", /\d0+/g ) // 100, 10

 量词是正则式的基石,下面有更多示例。

浮点数(带“.”):"\d+\.\d+"

1 showMatch( "Any number of digits: 123.45", /\d+\.\d+/ )  // 123.45

没有属性的HTML开始标签:"/<[a-z]+>/i"

1 showMatch( "<BODY> ... </BODY>", /<[a-z]+>/gi )  // <BODY>

 

上面的正则式匹配符号"<",后面跟着一个或多个字母,并以">"符号结尾。这就是匹配一个开始标签的一种写法。

开始标签(更好):"/<[a-z][a-z0-9]>/i"

一个HTML标签可能在除了首位的任意位置出现数字。所以第一个字符是"[a-z]",后面跟着零个或多个"[a-z0-9]"。

1 showMatch( "
2   ...    ", /<[a-z][a-z0-9]*>/gi )  // <H1>

这儿我们遇到一个会经常出现的尴尬情况。正则式越精确就越复杂。比如在HTML标签示例中,"<\w+>"也是个不错的选择。

当然"<\w+>"会匹配到非法标签如:"<_>",但是却比"<[a-z][a-z0-9]>"简单的多,而且在实际数据匹配中,也运行的非常好。

开始或结束标签:"/<\/?[a-z][a-z0-9]>/i"

为了同时能匹配开始和结束标签,一个可选择的斜杠"/?"被加在标签名前面。斜杠需要为JS解释器转义。

1 var re = /<\/?[a-z][a-z0-9]*>/gi
2 
3 showMatch( "<BODY> ... </BODY>", re )  // <BODY>, </BODY>

查找一个正或者负的小数。

1 var re = /* your regexp */
2 
3 var str = "1.5 0 123 -7 -0.4"
4 
5 alert(str.match(re))   // ‘1.5‘, ‘-0.4‘

一个整数"\d+"。再加一个小数在后面"\.\d+"变成"\d+\.\d+"。

现在让我们在前面再添加一个可选的负号"-?"变成"-?\d+\.\d+"。

最后,测试一下:

1 var re = /-?\d+\.\d+/g
2 
3 var str = "1.5 0 123 -7 -0.4"
4 
5 alert(str.match(re))   // ‘1.5‘, ‘-0.4‘

写一个正则式匹配数字。需要包含正整数和正小数:

1 var re = /* your regexp */
2 
3 var str = "1.5 0 123"
4 
5 alert(str.match(re))   // ‘1.5‘, ‘0‘, ‘123‘

整数部分"\d+"。

小数部分"\.\d+",再加一个"?"让它变得可选。

最后结果为:"\d+(\.\d+)?"。

1 var re = /\d+(\.\d+)?/g
2 
3 var str = "1.5 0 123"
4 
5 alert(str.match(re))   // ‘1.5‘, ‘0‘, ‘123‘

 

外文翻译——正则表达式(7)——量词+, * 和?

标签:

原文地址:http://www.cnblogs.com/zysos2016/p/5734942.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!