JS正则表达式正向前瞻习题引发的思考

大家好,我是大家熟悉的小编,易学前端笔记,今天给大家分享的是,JSJS正则表达式

JS正则表达式正向前瞻习题引发的思考

最近在做正则表达式的习题,题目本身不难,但我做完习题后难免脑洞大开举一反三,而这次,被我自己的脑洞难住了。

题目如下:当你收到一串HTML代码,需要对这一串HTML代码过滤,将里面所有的非

标签都改为

标签

因此一般解题的代码为:

JS正则表达式正向前瞻习题引发的思考

二、疑问

我不禁产生疑问:如果将reg改为:

JS正则表达式正向前瞻习题引发的思考

按照逻辑分析来说,结果也是一样的。但是,结果却大跌眼镜:

JS正则表达式正向前瞻习题引发的思考

可以看出,位于第二项的“

”变成了“

”。如果从逻辑上分析,如果“

三、分析

JS正则表达式正向前瞻习题引发的思考

JS正则表达式正向前瞻习题引发的思考

JS正则表达式正向前瞻习题引发的思考

JS正则表达式正向前瞻习题引发的思考

JS正则表达式正向前瞻习题引发的思考

JS正则表达式正向前瞻习题引发的思考

可以看出,位于第二项的“

”:“”对应“>”。

JS正则表达式正向前瞻习题引发的思考

可见,正则表达式按照字符匹配,先匹配"”。

其中,造成以上疑问的罪魁祸首是“?”,看看词条的解释:“? Quantifier — Matches between zero and one times, as many times as possible, giving back as needed (greedy)”。意思是:在“/”出现0次或1次这两种情况下匹配,判断各情况下的匹配情况,然后返回符合匹配且是贪婪匹配的情况(默认情况下是贪婪匹配)

JS正则表达式正向前瞻习题引发的思考

四、总结

正则表达式的基本语法、属性与方法、分组与捕获、引用与反向引用、贪婪匹配与惰性匹配、正向前瞻与负向前瞻、String方法的正则用法等,需要在理解的基础上,融会贯通,才能更好的掌握。

好了今天的内容就分享到这里~~


分享到:


相關文章: