0

プログラミング言語のリストにjQueryTokeninputオートコンプリートプラグインを使用していますが、「C ++」では「+」文字を処理しないことがわかりました。JavaScriptエラーが返され、オートコンプリートリストには何も表示されません。

「C」と入力すると、irはエラーを返します。

Uncaught SyntaxError:無効な正規表現:/(?![^&;] +;)(?!<[^ <>] )(C ++)(?![^ <>] >)(?![^&;] +;)/:繰り返すものはありません

問題は、RegExpステートメントを使用した小さなメソッドにあるようです。

function find_value_and_highlight_term(template, value, term) {
    return template.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + value + ")(?![^<>]*>)(?![^&;]+;)", "g"), highlight_term(value, term));
}

変数:

template = "<li>C++</li>";
value = "C++";
term = "C";

どうすれば修正できますか?

4

3 に答える 3

3

+正規表現の特別な修飾子で、「前のものの 1 つ以上に一致する」ことを意味します。'+'リテラル文字と照合するには、\

/(?![^&;]+;)(?!<[^<>])(C\+\+)(?![^<>]>)(?![^&;]+;)/

すべての特殊文字をエスケープするには:

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

var re = new RegExp(escapeRegex('[.*?]'));
于 2012-03-10T16:00:39.623 に答える