|
楼主 |
发表于 2021-3-11 14:42:51
|
显示全部楼层
再次感谢您的回复
结合上面我说的3个点,我先来说说我对"aaabbbccc".match(/cc|bb|aa/g); //Array [ "aa", "bb", "cc" ] 这条的匹配的分析,您看看我说的对不对,我这里分4步
step 1:
首先对于原字符串'aaabbbccc' ‘cc’先匹配好了原字符串中的'cc',然后由于第一个条件cc已完成匹配,所以
剩下的字符串其实是'aaabbbc' (这里的依据用到了上面说的3点的 第1 和 第3点)
step 2:
然后表达式bb 匹配 剩下的字符串'aaabbbc',那么匹配到这个字符串中的‘bb’后,剩下的字符串应该是'aaabc',这里还是用到了上面的第1,3两点
step 3:
最后表达式aa匹配字符串'aaabc',那么这样匹配到字符串中的'aa'后,最后字符串剩下'abc',到这一步匹配完毕
step 4:
最后一步就是输出了,经过前面三步,输出应该为 'cc' , ‘bb’ 和 'aa', 但是根据上面的第2点,要根据"原待匹配的字符串" 来进行输出,原字符串为 'aaabbbccc', 那么输出顺序自然还是 'aa' 'bb' 'cc'
所以结果输出结果是 aa bb cc
下面是引用原网页里的原文说明(原文第三段):
查找的循序是按照匹配条件左边开始到右边匹配,但是返回的结果是按照待匹配的字符串的字符顺序(从左到右)的第一个匹配结果进行输出。并且第一条件被匹配到字符串之后,后面的条件是在原来字符串减去已经匹配到的字符之后再进行查找匹配
分别对应我说的 第1点, 第3点 和 第2点
原文中的 "aaabbbccc".match(/a|ab/g); //Array [ "a", "a", "a" ] 以及
"aaabbbccc".match(/ab|a/g); //Array [ "a", "a", "ab" ] 这两个例子 也可以安装我上面说的分析
以上说的是否有错,一起讨论下,再次感谢
|
|