2012-06-12 2 views
1
var stringToHighlight = [userinput] // may be any string like "foo", "bar" or "." 
var stringToBeHighlighted = [any text] // Lorem Ipsum ... 

До сих пор яВыделив переменное слово в строке, используя регулярное выражение

var regex = new RegExp(stringToHighlight, "g")     
var highlightedString = stringToBeHighlighted.replace(regex, "<span class='highlight'>$&</span>") 

Это не работает для символа «» например, потому что он интерпретируется как метасимвол регулярного выражения. но не фактический характер ». в результате чего весь выделенный текст будет выделен. Как исключить эти специальные метасимволы?

+0

po повторяющийся дубликат [generic regexp с использованием переменной jquery для замены точки, двоеточия или любого другого символа] (http://stackoverflow.com/questions/9620131/generic-regexp-using-jquery-variable-to-replace-dot-colon- или-любой-другой-характ) – Qtax

ответ

1

JS не имеет встроенной в функции, чтобы избежать мета-символы в регулярных выражениях, но вы можете использовать эту функцию (от this answer):

function quotemeta(str){ 
    return str.replace(/[.+*?|\\^$(){}\[\]-]/g, '\\$&'); 
} 

, который будет использоваться следующим образом:

var regex = new RegExp(quotemeta(stringToHighlight), "g"); 
0

Вам нужно либо ввести фактическое регулярное выражение (выйдите из «.», Поставив перед ним «\», либо вы можете использовать такую ​​функцию, как http://phpjs.org/functions/strstr:551, для поиска строкового литерала

Смежные вопросы