Weboldal keresés

typescript - Miért nem működik ez a regex a vscode-ban, de működik egy másik oldalon?


Nem tudok sokat a reguláris kifejezésekről, de megpróbálom használni ezt a chatGPT által készített reguláris kifejezést a vscode-ban, de semmit sem ad eredményként. Viszont amikor egy másik oldalon, például a https://regex101.com/ használom, a karakterlánc megfelel a mintának.

Regex :

throw\s+new\s+ApiResponseError\s*\(\s*HttpStatusCode\.([^,]+),\s*('[^']*'|"[^"]*"),\s*new\s+Error\(`([^`]*)`\),\s*(true|false)?\s*\)

A minta, amely illeszkedik az oldalon:

                throw new ApiResponseError(
                    HttpStatusCode.BAD_REQUEST,
                    'low',
                    new Error(`Required parameters of the '${worksheetDefinitions.worksheetName}' worksheet were not informed`),
                    false
                )

Jegyezd meg az üres helyeket, szükségem van rájuk a reguláris kifejezésben is.

Van valamilyen konfiguráció, amit el kellene végeznem?

Megpróbáltam megváltoztatni a reguláris kifejezést, megoldásokat keresni, de továbbra sem ad vissza semmit. Azt vártam, hogy a reguláris kifejezés úgy működjön, mint az oldalon.

Válasz #1

Bármilyen regexet a Visual Studio Code-ban úgy tehetsz a sortörések között is illeszthetővé, ha a mintán belül bárhol megadod a \n{0} kifejezést; a legkényelmesebb helyek a minta eleje és vége. Azt ajánlanám, hogy tedd a minta elejére, hogy ne törjön meg semmilyen konkrét regex szerkezetet, ha nem vagy túl jártas a reguláris kifejezésekben.

Tehát a szabály \n{0} + YOUR_REGEX.

A VSCode regex motor megköveteli, hogy a \n jelen legyen a mintában, hogy bármilyen konstrukció, mint a \s vagy a [^"] egyezzen a sortörés karakterekkel, és egy „nulla új sor egyezés” minta definiálása elvégzi a feladatot.

Az Ön esetében használhatja

\n{0}throw\s+new\s+ApiResponseError\s*\(\s*HttpStatusCode\.([^,]+),\s*('[^']*'|"[^"]*"),\s*new\s+Error\(`([^`]*)`\),\s*(true|false)?\s*\)
^^^^^

Ha más problémáid vannak bármely karakter egyeztetésével egy VSCode reguláris kifejezéssel, lásd a Többsoros reguláris kifejezéseket a Visual Studio Code-ban.

Válasz #2

Add [\s\n]* a reguláris kifejezésedhez így:

throw\s+new\s+ApiResponseError[\s\n]*\(\s*HttpStatusCode\.([^,]+),\s*('[^']*'|"[^"]*"),\s*new\s+Error\(`([^`]*)`\),\s*(true|false)?\s*\)

ami, ahogy @Wiktor említette, szükséges, mert a vscode másképp kezeli a sortöréseket, mint a reguláris kifejezés motork. Teljesítménybeli okokból kifejezetten meg kell mondani a vscode-nak, hogy a sortöréseket literális \n segítségével keresse, nem csak \s-sel (ami egyébként tartalmazná a sortöréseket, de itt a vscode-ban nem teszi).

Tehát a [\s\n]* használata azt mondja a VSCode-nak, hogy nézze a sortöréseket is, valamint a többi \s műveletet.

Kapcsolódó cikkek