开发者社区> 问答> 正文

javascript中正则表达式的非贪婪重复的问题?

在《javascript权威指南》第六版 第十章 10.1.3节中
书中在介绍非贪婪的重复时举了一个例子,用正则表达式 /a+?/ 来匹配字符串 aaa ,
原话这样说的:

但是/a+?/也可以匹配一个或多个连续的字母a,但是它是尽可能少地匹配,我们将 aaa 作为匹配字符串,但只能匹配第一个a。
但是后来书中又举了一个例子,用正则表达式 /a+?b/ 来匹配字符串 aaab ,而匹配的是整个字符串。书中这样解释:

这是因为正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置。由于该匹配是从字符的第一个字符开始的,因此在这里不考虑它的子串中更短的匹配。
两段话不矛盾么?为什么/a+?b/会匹配aaab而不是 匹配一个a和最后一个b?

展开
收起
a123456678 2016-03-13 09:53:13 2275 0
1 条回答
写回答
取消 提交回答
  • 总是寻找字符串中第一个可能匹配的位置。所以 aaab 中第一个 a 直接满足 /a+?b/ 时直接就匹配了。
    非贪婪时尽可能少的匹配。所以 aaa 中第一个 a 直接满足 /a+?/ 时直接就匹配了。
    为什么 /a+?b/ 会匹配 aaab 而不是匹配第三个 a 和最后一个 b ?

    因为『寻找字符串中第一个可能匹配的位置』的优先级比『非贪婪』更高。

    2019-07-17 19:01:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载