代码实例如下:
var str="I love antzone";
var reg=/ant(tone|moze|zone)/g;
console.log(str.match(reg));

以上正则表达式可以匹配字符串中的"antzone"。在正则表达式中有分支选项,这里就会用到回溯了。
下面进行一下分解:
首先正则表达式字符串中的字符"a"会获得控制权,从位置0处开始匹配,它并不能够匹配字符"a",然后正则引擎推动字符"a"从下一个位置开始匹配,一直到字符串中的字符"a"才能够匹配成功,然后正则表达式的控制权传给字符"n",匹配字符"n"成功,然后控制权传递给字符"t",匹配字符"t"成功。这个时候后面会遇到三个分支,正则引擎会选择其中之一进行匹配,其他的则作为备用,首先选择"tone"进行匹配,匹配失败,但是此次失败并不说明这个匹配会失败,因为还有可能匹配成功的备用选项存在,这个时候正则表达式会回溯到"tone"开始匹配的位置,再使用"moze"进行匹配,最后最后一个选项分支可以匹配成功。
可能上面的稍显复杂了,下面来个简单的再回头看上面的可能就容易理解了。
代码如下:

 

var str="ac";
var reg=/a(d|c)/g;
console.log(str.match(reg));

 图示如下:

<ignore_js_op>
分解如下:
首先正则表达式中的字符"a"获得控制权,从位置0处开始匹配,它可以匹配字符串中的字符"a",然胡控制权让渡给"(d|b)",这是一个选择分支,首先使用第一个选项"d"从位置1处开始匹配,并且另一个选项"b"作为一个备选状态。字符"d"并不能够匹配字符"b",所以进行回溯,也就是再回到位置1处使用备选状态进行匹配。回溯原理大致如此,只是有的复杂有的简单而已。

 

相关文章:

  • 2021-11-23
  • 2022-01-11
  • 2022-02-14
  • 2022-12-23
  • 2021-09-21
猜你喜欢
  • 2022-12-23
  • 2022-01-02
  • 2021-11-23
  • 2021-08-17
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案