第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Javascript正則表達(dá)式掛起(使用v8)

Javascript正則表達(dá)式掛起(使用v8)

Javascript正則表達(dá)式掛起(使用v8)我正在使用此正則表達(dá)式來獲取文件中的標(biāo)記內(nèi)容。var regex = new RegExp("<tag:main>((?:.|\\s)*)</tag:main>");這會(huì)導(dǎo)致v8引擎無限期掛起?,F(xiàn)在,如果我使用new RegExp("<tag:main>([\s\S]*)</tag:main>"),一切都很好。任何人都知道為什么第一個(gè)需要太長(zhǎng)時(shí)間?
查看完整描述

3 回答

?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊

這會(huì)災(zāi)難性地回溯在最后一個(gè)結(jié)束</tag:main>標(biāo)記之后出現(xiàn)的長(zhǎng)序列空間??紤]主題字符串以100個(gè)空格結(jié)尾的情況。首先,它將它們?nèi)颗c.交替的左側(cè)相匹配。這失敗了,因?yàn)闆]有結(jié)束標(biāo)記,所以它嘗試匹配最后一個(gè)字符\s。這也失敗了,所以它嘗試匹配倒數(shù)第二個(gè)空格作為a \s和最后一個(gè)空格作為a .。失?。ㄈ匀粵]有結(jié)束標(biāo)記)所以它嘗試最后一個(gè)空格作為\s。當(dāng)失敗時(shí)它將第三個(gè)到最后一個(gè)空格匹配為a \s并嘗試所有4種方式來匹配最后兩個(gè)空格。當(dāng)失敗時(shí),它會(huì)嘗試倒數(shù)第四個(gè)空格\s以及最后3個(gè)空格中的所有8種方式。然后是16,32等。宇宙在它到達(dá)第100個(gè)到最后的空間之前結(jié)束。

由于災(zāi)難性的回溯,不同的VM對(duì)regexp匹配的反應(yīng)不同。有些人只會(huì)報(bào)告“不匹配”。在V8中,它就像編寫任何其他無限或近無限循環(huán)一樣。

使用非貪婪*會(huì)做你想要的(你想要在第一個(gè)</tag:main>而不是最后一個(gè)停止),但仍會(huì)對(duì)缺少關(guān)閉序列的長(zhǎng)串空間進(jìn)行災(zāi)難性的回溯。

確保內(nèi)括號(hào)中的相同字符不能與交替的兩側(cè)匹配將減少?gòu)闹笖?shù)一到一的問題,該問題在字符串的長(zhǎng)度上是線性的。使用字符類而不是替換或放在\n交替欄的右側(cè)。 如果您按下一長(zhǎng)串空格,則正則表達(dá)式引擎在終止之前不會(huì)嘗試所有左右 - 左等組合\n,.因此是不相交的。


查看完整回答
反對(duì) 回復(fù) 2019-08-28
?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊

我認(rèn)為這是災(zāi)難性的追溯。

我認(rèn)為問題的一部分可能是dot和\ s不是互斥的。

如果我改變你的表達(dá)方式

<tag:main>((?:.|[\r\n])*)</tag:main>

并在Regex Buddy調(diào)試器中運(yùn)行它,如果測(cè)試字符串不匹配,它會(huì)更快地失敗。


查看完整回答
反對(duì) 回復(fù) 2019-08-28
?
冉冉說

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊

(?:.|\s)*您可以使用[^]*匹配任何字符(包括各種形式的換行符)來代替。

沒有交替,所以沒有災(zāi)難性回溯的風(fēng)險(xiǎn)。


查看完整回答
反對(duì) 回復(fù) 2019-08-28
  • 3 回答
  • 0 關(guān)注
  • 629 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)