美文网首页
JS 正则表达式#2贪婪,懒惰模式

JS 正则表达式#2贪婪,懒惰模式

作者: IamaStupid | 来源:发表于2020-07-01 10:09 被阅读0次

贪婪,懒惰模式

重复匹配

在正则表达式语法中,定义了一组重复类量词,如表所示。它们定义了重复匹配字符的确数或约数。

重复类量词列表
量词 描述
n+ 匹配任何包含至少一个 n 的字符串
n* 匹配任何包含零个或多个 n 的字符串
n? 匹配任何包含零个或一个 n 的字符串
n{x} 匹配包含 x 个 n 的序列的字符串
n{x,y} 匹配包含最少 x 个、最多 y 个 n 的序列的字符串
n{x,} 匹配包含至少 x 个 n 的序列的字符串

重复类量词都具有贪婪性,在条件允许的前提下,会匹配尽可能多的字符(尽可能的往右匹配就是贪婪性匹配)。
?、{n} 和 {n,m} 重复类具有弱贪婪性,表现为贪婪的有限性。
*、+ 和 {n,} 重复类具有强贪婪性,表现为贪婪的无限性。

与贪婪匹配相反,惰性匹配将遵循另一种算法:在满足条件的前提下,尽可能少的匹配字符。定义惰性匹配的方法:在重复类量词后面添加问号?限制词。贪婪匹配体现了最大化匹配原则,惰性匹配则体现最小化匹配原则。

针对 6 种重复类惰性匹配的简单描述如下:
{n,m}?:尽量匹配 n 次,但是为了满足限定条件也可能最多重复 m 次。
{n}? : 尽量匹配 n 次。
{n,}? : 尽量匹配 n 次,但是为了满足限定条件也可能匹配任意次。
?? : 尽量匹配,但是为了满足限定条件也可能最多匹配 1 次,相当于 {0,1}?。
+? : 尽量匹配 1 次,但是为了满足限定条件也可能匹配任意次,相当于 {1,}?。
*? : 尽量不匹配,但是为了满足限定条件也可能匹配任意次,相当于 {0,}?。

找出{{}}内的字符串,{{msg}}, {{person.name}}
 str = "{{msg}} - {{person.name}}--}}--{{}}"
  // reg = new RegExp(/\{\{(.+)\}\}/g);
  reg = new RegExp(/\{\{(.{1,})\}\}/g);
  arr = reg.exec(str)
  arr2 = str.match(reg)
  console.log('exec:', arr)
  console.log('match:', arr2)
  // exec: (2) ["{{msg}} - {{person.name}}--}}--{{}}", "msg}} - {{person.name}}--}}--{{", index: 0, input: "{{msg}} - {{person.name}}--}}--{{}}", groups: undefined]
  // match: ["{{msg}} - {{person.name}}--}}--{{}}"]
// 这是强贪婪模式

  // reg = new RegExp(/\{\{(.+?)\}\}/g);
  reg = new RegExp(/\{\{(.{1,}?)\}\}/g);
  arr = reg.exec(str)
  arr2 = str.match(reg)
  console.log('exec:', arr)
  console.log('match:', arr2)
  // exec: (2) ["{{msg}}", "msg", index: 0, input: "{{msg}} - {{person.name}}--}}--{{}}", groups: undefined]
  // match: (2) ["{{msg}}", "{{person.name}}"]
// 这是弱贪婪模式

  reg = new RegExp(/\{\{(.*?)\}\}/g);
  arr = reg.exec(str)
  arr2 = str.match(reg)
  console.log('exec:', arr)
  console.log('match:', arr2)
  // exec: (2) ["{{msg}}", "msg", index: 0, input: "{{msg}} - {{person.name}}--}}--{{}}", groups: undefined]
  // match: (3) ["{{msg}}", "{{person.name}}", "{{}}"]

相关文章

  • 正则表达式possessive、greediness和lazin

    正则表达式(Regular Expression)的贪婪模式(Greediness)和懒惰模式(Laziness)...

  • JS 正则表达式#2贪婪,懒惰模式

    贪婪,懒惰模式 重复匹配 在正则表达式语法中,定义了一组重复类量词,如表所示。它们定义了重复匹配字符的确数或约数。...

  • Day10 JS & ajax

    (续) 上一节正则表达式 贪婪模式 1. JS内置对象 Date 动态时钟Demo 2. AJAX 2.1 JS原...

  • 正则表达式 python 实现

    正则表达式 1.原子2.元字符3.模式修正4.贪婪模式5.懒惰模式 1.原子 原子是正则表达式中最基本的组成单位,...

  • day05

    A.你今天学到了什么 1.正则表达式的默认属性 2.正则表达式的test()方法 3.量词的贪婪模式和懒惰模式 4...

  • 正则表达式系列-4

    正则表达式系列-1正则表达式系列-2正则表达式系列-3正则表达式系列-4 贪婪与懒惰 贪婪匹配:匹配尽可能多的字符...

  • 正则表达式的贪婪模式和非贪婪模式

    一、什么是贪婪模式和非贪婪模式? 定义 贪婪模式:正则表达式趋向于匹配最大长度。 非贪婪模式:正则表达式趋向于匹配...

  • 正则表达式

    基础正则表达式 拓展正则表达式 贪婪与懒惰

  • 正则表达式基础到高阶(语法)

    正则表达式基础到高阶(语法) 元字符 反义 重复模式 贪婪与懒惰 分组 后向引用 要匹配 taobao taoba...

  • JavaScript 正则表达式( 匹配网页的图片地址)

    正则表达式 - 元字符 贪婪模式与非贪婪模式 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为;贪婪模式 在...

网友评论

      本文标题:JS 正则表达式#2贪婪,懒惰模式

      本文链接:https://www.haomeiwen.com/subject/eitcqktx.html