I am using jQuery Tokeninput autocomplete plugin for the list of programming languages and I have found out, that it does not handle a “+” character in “C++”: it returns a JavaScript error and nothing appears on autocomplete list.
When I enter “C” ir returns the error:
Uncaught SyntaxError: Invalid regular expression:
/(?![^&;]+;)(?!<[^<>])(C++)(?![^<>]>)(?![^&;]+;)/: Nothing to repeat
The problem seems to be in a small method with RegExp statement:
function find_value_and_highlight_term(template, value, term) {
return template.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + value + ")(?![^<>]*>)(?![^&;]+;)", "g"), highlight_term(value, term));
}
Variables:
template = "<li>C++</li>";
value = "C++";
term = "C";
How do I fix it?
+is a special modifier in regexes which means “match one or more of the previous thing”. To match against a literal'+'character, escape it with a\To escape all special characters: