熟悉正则的朋友都知道,正则的匹配有“贪婪”和“非贪婪”之分。

“贪婪”匹配是尽可能多的匹配:

对于字符串‘aaaa’,

/a+/匹配整个字符串,而非贪婪匹配/a+?/匹配的是整个字符串的第一个‘a’,因为贪婪匹配是尽可能少的匹配。

——————————————

使用非贪婪匹配还有一些需要注意的地方。

考虑下面这个正则表达式:/a+b/,它匹配一个或多个a,以及一个b。

使用‘aaab’作为匹配字符串时,它会匹配整个字符串。

如果我们换成/a+?b/这样的非贪婪模式会怎么样?

我们期望它匹配一个a和最后一个b,相当于在‘aaab’中匹配最后两个字符‘ab’。

但实际上,这个模式匹配了整个字符串,和这个模式的贪婪匹配一样,这是为什么呢?

是因为正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置。由于该匹配是从字符串的第一个字符开始的,因此在这里不考虑它的子串中更短的匹配。

javascript正则——贪婪匹配的更多相关文章

  1. php正则贪婪匹配与非贪婪匹配一些例子

    http://www.111cn.net/phper/210/55600.htm 贪婪模式匹配的原则是: 在可匹配也可不匹配的情况下, 优先匹配,直到不能匹配成功的情况下,记录备选状态,并把匹配控制交 ...

  2. java 正则 贪婪匹配 匹配sql语句中的引号内容

    public class Demo { public static void main(String[] args) { String sql1 = "use test;select * f ...

  3. PHP正则 贪婪匹配与非贪婪匹配

    $str = ".abcdeabcde"; preg_match('/a.+?e/', $str, $match); print_r($match); Array ( [0] =& ...

  4. 我也谈javascript正则匹配

    一.javascript 正则全局匹配 g 慎用test()方法 来个例子: var a = /^[a-z]+/gi; a.test('bb123'); //true a.lastIndex ; // ...

  5. re 正则匹配的非贪婪匹配

    非贪婪匹配 将尽可能少的匹配内容,当?出现在其他的重复次数后面时会将贪婪模式改为非贪婪模式. ? 如 abc.*? abc.+? 非贪婪匹配:尽可能少的匹配{n,}?{,n}?{n,m}?*? # * ...

  6. VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,中文正则,倒数第二列, 匹配任意一个字符 :

    VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3     移动n1-n2行(包括n1,n2)到n3行之下: ...

  7. JavaScript正则详谈

    JavaScript RegExp 基础详谈   前言: 正则对于一个码农来说是最基础的了,而且在博客园中,发表关于讲解正则表达式的技术文章,更是数不胜数,各有各的优点,但是就是这种很基础的东西,如果 ...

  8. JavaScript 正则

    元字符 预定义类 边界 ^在中括号中时,匹配非hello的 str = 'hello world' str.match(/[^hello]/g) //[" ", "w&q ...

  9. php 正则中文匹配

    汉字一定注意是gbk还是utf8编码 UTF-8匹配:在javascript中,要判定字符串是中文是很简朴的.比如:var str = "php编程";if (/^[\u4e00- ...

随机推荐

  1. 那么小伙伴么,问题来了,WPF中,控件的Width="*"在后台怎么写?

    用到DataGrid的列是自动生成的,但是大家都知道,WPF的DataGrid会在最后多出一列,通常的解决办法都是在最后一列的列宽上这样设置 Width="*",这样,最后一列多出 ...

  2. Cocopod上更新上传自己的开源框架供别人下载

    为了更方便的集成第三方框架有了cocopods 的, 当我们有了相对比较好的框架的时候如何更新到cocopods 供他人参考呢? 下面我一步一步带大家开源自己的框架. 第一步 把自己的框架更新到git ...

  3. [MCSM]Exponential family: 指数分布族

    Exponential family(指数分布族)是一个经常出现的概念,但是对其定义并不是特别的清晰,今天好好看了看WIKI上的内容,有了一个大致的了解,先和大家分享下.本文基本是WIKI上部分内容的 ...

  4. JavaScript和html5 canvas生成圆形印章

    代码: function createSeal(id,company,name){ var canvas = document.getElementById(id); var context = ca ...

  5. JS BOM知识整理

    BOM部分主要是针对浏览器的内容,其中常用的就是window对象和location, window是全局对象很多关于浏览器的脚本设置都是通过它. location则是与地址栏内容相关,比如想要跳转到某 ...

  6. [代码片段]javascript检查图片大小和格式

    function checkImgType(input) { var this_ = document.getElementsByName('imgFile')[0]; var filepath = ...

  7. The class has no identifier property

    这个问题一般是***.hbm.xml中的id属性中的name没有配置. 例: <?xml version="1.0" encoding="utf-8"?& ...

  8. 5.9-3 用正则表达式判断字符串text是否为合法的手机号

    package zfc; public class Zfc { public static void main(String[] args) { //判断手机号格式是否合法 String text = ...

  9. poj1509 最小表示法

    #include<stdio.h> #include<string.h> #define maxn 10010 char s[maxn]; int getmin() { int ...

  10. Java基础-gs(垃圾回收)

    Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 ...