贪婪匹配和懒惰匹配

基本语法

符号 用法
. 匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。
? 匹配前面的子表达式0到1次
* 匹配前面的子表达式人任意次
+ 匹配前面的子表达式一次或多次(大于等于1次)

懒惰匹配

表达式 .* 的意思很好理解,就是单个字符匹配任意次,即贪婪匹配。 
表达式 .*? 是满足条件的情况只匹配一次,即懒惰匹配

这是什么 意思?我们用例子来解释。

var str = ‘Anna is {age} years old,Bob is {age} years old too‘;
var expr = /{.*?}/g;
console.log(str.replace(expr, ‘13‘));

命令行输出: Anna is 13 years old,Bob is 13 years old too

可以看出,懒惰模式下,只要满足条件,就不再向后匹配,以下是贪婪模式:

var str = ‘Anna is {age} years old,Bob is {age} years old too‘;
var expr = /{.*}/g;
console.log(str.replace(expr, ‘13‘))

命令行输出: Anna is 13 years old too

中间所有满足条件的都被替换了

注意

像 .+* 以及 .*+这种表达式是错误的,命令行会报错。如果希望贪婪匹配,直接 .* 或者 .+就可以

原文地址:https://www.cnblogs.com/dongzhuangdian/p/8232704.html

时间: 2024-10-13 04:58:01

贪婪匹配和懒惰匹配的相关文章

javascript正则表达式之最长匹配(贪婪匹配)和最短匹配(懒惰匹配)

最近在阅读RequireJS 2.1.15源码,源码开始处定义了一系列的变量,有4个正则表达式: var commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//; comment

perl学习之:理解贪婪匹配和最小匹配之间的区别

正则表达式的新手经常将贪婪匹配和最小匹配理解错误.默认情况下,Perl 的正则表达式是“贪婪地”,也就是说它们将尽可能多地匹配字符. 下面的脚本打印出“matched defgabcdef”,因为它尽可能多地匹配模式,直至结尾的‘g’. $data = 'abcdefgabcdefg';$data =~ /abc(.+)g/i;print "matched "; 要改变匹配特点,只须简单地在量词(加号[+]或星号[*])后面加一个问号(?)即可.在上面的程序中把模式改为在‘+’之后包含

个人理解正则表达式——懒惰匹配

问题描述 本文链接:http://www.hcoding.com/?p=130 初学正则表达式的时候都有一个疑问,例如:需要匹配串 "_abc_123_" 中 第一对"_"之间的字符,刚开始学习正则表达式的时候会写成 "/_\w*_/",匹配的结果就是"abc_123" 而不是"abc"了:大神说加上一个问号,"/_\w*?_/",这时候匹配的结果就是"abc". 我

正则表达式(二) - 零宽断言与懒惰匹配以及平衡组

小括号的作用 分类 代码/语法 说明 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) (?:exp)   匹配exp,不捕获匹配的文本,也不给此分组分配组号 零宽断言 (?=exp) 匹配exp前面的位置 (?<=exp)  匹配exp后面的位置 (?!exp)  匹配后面跟的不是exp的位置 (?<!exp) 匹配前面不是exp的位置 注释 (?#comment)

js正则表达式验证、匹配数字、匹配字符串、匹配中文、匹配任意字符备忘录

本文转自:91博客 :原文地址:http://www.9191boke.com/235792704.html 正则表达式或“regex”用于匹配字符串的各个部分,下面是我创建正则表达式的备忘录.包括一些常用的验证.匹配数字.匹配字符串.匹配中文.匹配任意字符串. 匹配正则 使用 .test() 方法 let testString = "My test string"; let testRegex = /string/; testRegex.test(testString); 匹配多个模

kuangbin带你飞 匹配问题 二分匹配 + 二分图多重匹配 + 二分图最大权匹配 + 一般图匹配带花树

二分匹配:二分图的一些性质 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图. 1.一个二分图中的最大匹配数等于这个图中的最小点覆盖数 König定理是一个二分图中很重要的定理,它的意思是,一个二分图中的最大匹配数等于这个图中的最小点覆盖数.如果你还不知道什么是最小点覆盖,我也在这里说一下:假如选

空三匹配和密集匹配的区别与联系

很多人包括一些业内人士都不清楚空三匹配(空中三角测量中的连接点匹配,亦即计算机视觉中的SFM算法中的同名点匹配,比如SIFT算法)和密集匹配(也叫立体匹配,立体对应或稠密匹配)有什么区别,于是经常会问诸如下列问题: 1. 做空三匹配的时候做的密集一点就是密集匹配了吧? 2. 空三匹配做完定向后就可以得到正射影像了吧? 3. 用sift也可以做密集匹配吧? 殊不知,以上三个问题的答案都是:NO! 下面我们就来说明一下空三匹配和密集匹配有什么区别和联系. 1. 定义 空三匹配:在空中三角测量(SFM

WildcardMatching和Regex,通配符匹配和正则表达式匹配

WildcardMatching:通配符匹配 算法分析: 1. 二个指针i, j分别指向字符串.匹配公式. 2. 如果匹配,直接2个指针一起前进. 3. 如果匹配公式是*,在字符串中依次匹配即可. 注意记录上一次开始比较的位置 Implement wildcard pattern matching with support for '?' and '*' '?' Matches any single character. '*' Matches any sequence of character

perl学习之:肯定匹配和否定匹配

tr/ / / 替换操作符不支持正则表达式 也不具备双引号替换能力m/ /  s/ / / 都支持正则表达式,并且可以提供或限制双引号替换能力 $string = "25abc8";$string =~ /abc(?=[0-9])/;(?=pattern) 前看声明,如果正则表达式在下一次匹配 pattern 风格,就开始匹配,而且不影响匹配效果.如/\w+(?=\t)/将匹配制表符是否恰好在一个字\w+后面出现,并且制表符不添加到$&的值中:$matched = $&