Mozilla te chanje lè l sèvi avèk yon motè komen ekspresyon regilye ak Chromium

Motè JavaScript SpiderMonkey Firefox tradui pou itilize yon aplikasyon ajou nan ekspresyon regilye ki baze sou kòd aktyèl la Irregexp soti nan motè JavaScript V8 yo itilize nan navigatè ki baze sou pwojè Chromium la. Yo pral pwopoze yon nouvo aplikasyon RegExp nan vèsyon Firefox 78 ki te 30 jen, epi li pral pèmèt navigatè a aplike tout eleman ECMAScript ki manke ki gen rapò ak ekspresyon regilye yo.

Li te note ke motè RegExp nan SpiderMonkey fèt kòm yon eleman separe, ki fè li relativman endepandan ak apwopriye pou ranplasman san yo pa bezwen fè chanjman enpòtan nan baz kòd la. Modilarite te pèmèt an 2014 pou ranplase motè YARR RegExp ki te itilize orijinèlman nan Firefox ak yon fouchèt motè Irregexp ki soti nan V8. Irregexp mare ak API V8, mare ak pèseptè fatra a, sèvi ak reprezantasyon chèn espesifik V8 ak modèl objè. Nan pwosesis pou adapte yo ak API entèn SpiderMonkey nan 2014, motè Irregexp la te pasyèlman reekri, ak chanjman ki parèt, tankou drapo '\u', kote sa posib. andire nan yon fouchèt ki kenbe pa Mozilla.

Malerezman, kenbe yon fouchèt senkronize difisil epi li mande anpil resous pou kenbe. Avèk entwodiksyon nouvo karakteristik ki gen rapò ak ekspresyon regilye nan estanda ECMAScript 2018 la, devlopè Mozilla yo te kòmanse reflechi sou fason yo te kapab fasilman pote chanjman nan Irregexp. Kòm yon fason soti, yo te pwopoze konsèp nan obligatwa, ki pèmèt itilize motè Irregexp ki prèske pa chanje nan SpiderMonkey (chanjman yo desann sèlman nan ranplasman otomatik "#include" blòk).

Mozilla te chanje lè l sèvi avèk yon motè komen ekspresyon regilye ak Chromium

Liaison a bay Irregexp ak karakteristik ki nesesè pou V8-espesifik, ki gen ladan jesyon memwa ak fonksyon jenerasyon kòd, osi byen ke premye estrikti done ki aplike sou baz mekanis jesyon memwa, dèlko kòd, ak estrikti SpiderMonkey.

Yon aktyalizasyon motè RegExp a pral pèmèt Firefox sipòte karakteristik tankou kaptire non, chape nan klas karaktè Unicode, drapo dotAll la, ak mòd Lookbehind:

  • Gwoup non yo pèmèt ou asosye pati nan yon fisèl matche pa yon ekspresyon regilye ak sèten non olye de nimewo seri alimèt (pa egzanp, olye de "/(\d{4})-(\d{2})-(\d{ 2})/" ou ka presize "/(? \d{4})-(? \d{2})-(? \d{2})/" epi jwenn aksè nan ane a pa atravè rezilta[1], men atravè rezilta.groups.year).
  • Chape nan klas yo Karaktè Unicode yo ajoute \p{…} ak \P{…} konstwi yo, pa egzanp, \p{Nimewo} defini tout karaktè posib ak imaj chif yo (ki gen ladan karaktè tankou ①), \p{Alfabétique} - lèt (ki gen ladan l yeroglif ), \p{Math} — senbòl matematik, elatriye.
  • Drapo dotAll lakòz mask la "." ki gen ladan karaktè newline.
  • Mode Gade dèyè pèmèt ou detèmine nan yon ekspresyon regilye ke yon modèl anvan yon lòt (pa egzanp, matche ak yon montan dola san yo pa kaptire siy dola a).

Pwojè a te aplike avèk patisipasyon devlopè V8 yo, ki, bò kote pa yo, te travay pou redwi depandans Irregexp sou V8, epi li te deplase kèk karakteristik ki pa ka aplike baze sou SpiderMonkey nan blòk "#ifdef" ki andikape. Kolaborasyon an te pwouve yo dwe mityèlman benefisye. Pou pati yo, devlopè Mozilla yo te soumèt chanjman nan Irregexp ki elimine kèk enkonsistans ak kondisyon ki nan estanda JavaScript ak amelyore bon jan kalite kòd. Epitou, pandan tès fuzzing Firefox, yo te idantifye ak korije erè ki te deja inapèsi nan kòd Irregexp ki te lakòz aksidan.

Sous: opennet.ru

Add nouvo kòmantè