Înlocuiți un punct cu un caracter HTML (Programare, Javascript, Jquery)

Hawkeye a intrebat.

Am o problemă cu un cod. Am introdus un input și textul dintr-un paragraf este evidențiat folosind <mark>. Dar când adaug un punct pentru a evidenția toate punctele, codul o ia razna și îmi dă codul html real și are evidențieri aleatorii. Așa că am încercat să adaug un înlocuitor pentru a schimba punctele. Acum nu se mai sperie, dar nu mai evidențiază nimic. Iată codul meu care încearcă să înlocuiască punctul cu numărul de caractere html (&#46;):

var i = document.getElementById("Bar").value;
var inpu = $.trim(i);
var inp = inpu.replace(".", "&#46;");
var SearchReq = new RegExp("(\b" + inp + "\b)", "gim");
var Notes = document.getElementById("NoteHolder").innerHTML;
var after = Notes.replace(SearchReq, "<mark class=" + ColorOptionReady + ">$1</mark>");
document.getElementById("NoteHolder").innerHTML = after;

Care este problema cu acest cod? (Am încercat să înlătur „b” din regex, dar asta nu a rezolvat problema.)

Comentarii

  • Atunci când construiți regex-ul dvs. SearchReq trebuie să scăpați caracterele care au o semnificație specială în cadrul unui regex. Astfel, acestea includ puncte, paranteze, paranteze pătrate etc. Înlocuirea lor cu entități html nu va ajuta, deoarece html-ul elementului de paragraf nu include entități html. –  > Por nnnnnnnn.
1 răspunsuri
Andriy Ivaneyko

Înlocuiți . în \. ( scăpați-l, \ backslash necesar pentru a păstra backslash-ul atunci când ați trece șirul la RegExp) :

var inp = inpu.replace(".", "\.");

Motivul erorii dvs. este că . este un caracter care are o semnificație specială în RegExp, deci trebuie să îl scăpați înainte de a-l trece în RefExp.

A se vedea Semnificația caracterelor speciale în expresiile regulate pentru mai multe informații.

Succes)!

Comentarii

  • Ar trebui să scăpați și backslash-ul din șirul literal. „\.” –  > Por nnnnnnnn.
  • @nnnnnnnn De ce aș avea nevoie de „\.” în loc de „\.”? De asemenea, cum aș face cu „
    , deoarece acesta scapă de ghilimele și ar încurca înlocuirea? –  > Por Hawkeye.
  • Tot o dă în bară și dacă scriu doar „..” –  > Por Hawkeye.
  • Într-un literal de șir de caractere Javascript, backslash este caracterul de scăpare, deci dacă doriți o backslash reală în șirul dvs. trebuie să o scăpați cu o altă backslash. Așadar, șirul literal "\." creează un șir care are o backslash urmată de un punct (ceea ce este ceea ce aveți nevoie pentru regex-ul dvs.). Șirul literal "." creează un șir care este doar un punct – backslash-ul este ignorat deoarece nu a fost urmat de un caracter de scăpare. –  > Por nnnnnnnn.
  • @nnnnnnnnnn ohh, bine, am înțeles ce vrei să spui, mulțumesc pentru sugestia de utilizare completă. –  > Por Andriy Ivaneyko.