2016-03-06 32 views
5

Bazı kodlarda sorun yaşıyorum. Girdi ve bir paragrafta metin <mark> kullanarak vurgulanır. Ancak, tüm dönemleri vurgulamak için bir süre eklediğimde, kod kaçar ve gerçek html kodunu verir ve rasgele vurguları vardır. Bu yüzden dönemleri değiştirmek için bir değiştirici eklemeye çalıştım. Şimdi çıldırmayacak ama hiçbir şey vurgulamayacak.Bir karakteri, HTML karakteri ile değiştirin

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; 

koduyla sorun nedir: İşte benim kod html karakter sayısı (&#46;) ile dönemini değiştirmeye çalışmaktır? (Ben regex "\ b" çıkarmadan çalıştı ama şimdi düzelmiş değildi.)

+1

Regex 'SearchReq''nizi oluştururken, normal ifadede özel bir anlamı olan karakterlerden kaçmanız gerekir. Bu nedenle, dönemler, parantezler, köşeli parantezler vb. Içerir. Bunları html öğelerini kullanarak değiştirme, paragraf öğenizin html'sinin html varlıkları içermemesi nedeniyle yardımcı olmaz. – nnnnnn

cevap

5

değiştirin \\. için . (ondan kaçmak, sen RegExp dize geçerdi zaman ters eğik çizgi korumak için gereken \\ ters eğik çizgi):

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

Hatanızın nedeni, .'un RegExp'te özel anlamı olan bir karakter olmasıdır, bu nedenle RefExp'e geçmeden önce onu ayırmanız gerekir.

Daha fazla bilgi için bkz. Special characters meaning in regular expressions.

Good Luck)!

+1

Dize değişmezinde de ters eğik çizgi kaçmak gerekir. "\\". – nnnnnn

+0

@nnnnnn Neden "\\" ye ihtiyacım var? sadece "\" yerine Ayrıca, "\" için nasıl yapacağım, çünkü bu tekliflerden kaçar ve değiştirmeyi bozar mıydı? – Hawkeye

+0

Sadece "." Yazıyorsam yine de berbat. – Hawkeye