Mám nasledujúci kód, ktorý som ukradol z inej SO otázky,
$("#"+"^`test".replace(/[!"#$%&"()*+,./:;<=>?@[\]^`{|}~]/g, "\\$&"))
ktorý spôsobí nasledujúcu chybu.
Uncaught Error: Syntax error, unrecognized expression: # \ ^ \ `test (...)
Mám len nejaké ID so šialenými znakmi, ako napríklad ^ a `, ktoré potrebujem, aby sa jQuery nezadusil. Nechápem, prečo sa táto chyba deje, pretože ak manuálne pridám lomítka do reťazca ako,
$("#"+"\^\`test")
potom to funguje dobre. Čo je zlé na metóde regulárneho výrazu?
odpovede:
3 pre odpoveď č. 1Mám len nejaké ID so šialenými znakmi, ako napríklad ^ a `, ktoré potrebujem, aby sa jQuery nezadusil.
Zďaleka najjednoduchší spôsob riešenia, ktorý je možné dosiahnuť pomocou selektora atribútov:
$("[id="" + theId + ""]").doSomething();
Tak dlho theId
neobsahuje spätné lomky ani dvojité úvodzovky, nie je potrebné ďalšie unikanie.
2 pre odpoveď č. 2
Ďalším riešením je použitie vanilky getElementById
, ktorý neanalyzuje selektor. Takto stále máte efektivitu výberu podľa id:
let res = $(document.getElementById("^`test"));
0 pre odpoveď č. 3
Čo tak to využiť?
const $ID = function(selector){
return $("[id="" + selector.match(/#?(S+)/)[1] + ""]")
}
Potom ho môžete použiť rovnako ako jQuery
$ID("#^`div")
0 pre odpoveď č. 4
Potrebujete dvakrát únik. Pretože na nahradenie / regulárny výraz potrebujete najskôr únik, aby ste mohli napísať únik. Ďalším únikom je potreba z jquery o $ ().
Jasnejšia syntax ako regulárny výraz postet je:
"#^bla`".replace("^","\^").replace("`","\`");
nahradí "# ^ bla" "" # \ ^ bla \ "".
Uncaught Error: Syntax error, unrecognized expression: # \ ^ \ `test (...)
Ak chcete použiť svoj regulárny výraz, musíte tiež uniknúť [] pomocou [a].
"+".replace(/[!"#$%&"()*+,."()*+,./:;<=>?@[\]^`{|}~]/g, "yes")