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方法的正則用法等,需要在理解的基礎上,融會貫通,才能更好的掌握。

好了今天的內容就分享到這裡~~


分享到:


相關文章: