当前位置: 代码迷 >> JavaScript >> JS正则(贪婪方式)
  详细解决方案

JS正则(贪婪方式)

热度:295   发布时间:2012-11-12 12:31:58.0
JS正则(贪婪模式)

js学习笔记

?

用到的几个链接

?

http://apps.hi.baidu.com/share/detail/9221711

?

可以当API用,说的很详细。

?

当该字符紧跟在任何一个其他限制符 (*, +, ?, {n }, {n ,}, {n ,m }) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

?

http://blog.sina.com.cn/s/blog_50a82dcd010095sh.html

?

讲解贪婪惰性

?

正则表达式量词分别是:贪婪的、惰性的、支配性的。

贪婪:

? * + {n} {n,m} {n,}

惰性:

?? ?*? ?+? ?{n}? ?{n,m}? ?{n,}?

支配:

?+ ?*+ ?++??{n}+??{n,m}+ ?{n,}+

?

分别的意思是:

零次或一次出现、零次或多次出现、一次或多次出现、恰好N次出现、至少N次最多M次出现、至少N次出现。

?

贪婪量词:先看整个字符串是否匹配,如果不匹配就把最后一个字符去掉在进行匹配,不匹配继续去掉最后一个字符,指导找到一个匹配或者不剩任何字符才停止。

?

惰性量词:先看第一个字符串是否匹配,如果第一个不匹配就在加入第二个字符串依此类推,指导找到一个匹配或者不剩任何字符才停止,贪婪量词与贪婪量词的方法正好相反.

?

浏览器对量词的支持还不完善,IE和OPERA都不支持量词,MOZILLA把支配量词看作是贪婪的

?

例子:

var str = 'aabbazbbwwbbaa';
var arr =str.match(/.*bb/);?//aabbazbbwwbb,贪婪的
var arr =str.match(/.*?bb/g);?//aabb azbb wwbb 返回一个数组包含3个值,惰性的

?

精华帖 http://www.iteye.com/topic/481228

也很详细

?

?g (全文查找)?
?i (忽略大小写)?
?m (多行查找)

?

正则表达式对象的方法?
?test,返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。如果存在则返回 true,否则就返回 false。?
?exec,用正则表达式模式在字符串中运行查找,并返回包<script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/themes/advanced/langs/zh.js"></script><script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/plugins/javaeye/langs/zh.js"></script>含该查找结果的一个数组。?
?compile,把正则表达式编译为内部格式,从而执行得更快。?

?

正则表达式对象的属性?
?source,返回正则表达式模式的文本的复本。只读。?
?lastIndex,返回字符位置,它是被查找字符串中下一次成功匹配的开始位置。?
?$1...$9,返回九个在模式匹配期间找到的、最近保存的部分。只读。?
?input ($_),返回执行规范表述查找的字符串。只读。?
?lastMatch ($&),返回任何正则表达式搜索过程中的最后匹配的字符。只读。?
?lastParen ($+),如果有的话,返回任何正则表达式查找过程中最后括的子匹配。只读。?
?leftContext ($`),返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符。只读。?
?rightContext ($'),返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。只读。?

?

String对象一些和正则表达式相关的方法?
?match,找到一个或多个正则表达式的匹配。?
?replace,替换与正则表达式匹配的子串。?
?search,检索与正则表达式相匹配的值。?
?split,把字符串分割为字符串数组。

?

贪婪量词与惰性量词?

?用贪婪量词进行匹配时,它首先会将整会字符串当成一个匹配,如果匹配的话就退出,如果不匹配,就截去最后一个字符进行匹配,如果不匹配,继续将最后一个字符截去进行匹配,直到有匹配为止。直到现在我们遇到的量词都是贪婪量词?
?用惰性量词进行匹配时,它首先将第一个字符当成一个匹配,如果成功则退出,如果失败,则测试前两个字符,依些增加,直到遇到合适的匹配为止?

惰性量词仅仅在贪婪量词后面加个"?"而已,如"a+"是贪婪匹配的,"a+?"则是惰性的

var str = "abc";
var re = /\w+/;//将匹配abc
re = /\w+?/;//将匹配a
?

?

?

  相关解决方案