我正在尝试构建一个小型Javascript应用程序,该应用程序加载第三方站点,查找给定单词并使用Jquery扩展Highlight突出显示文档的最接近上下文(使用小型自定义来允许正则表达式)。
首先,我试图让应用程序通过将上下文设置为500个字符来突出显示周围环境,但由于某种原因,它会在奇怪的地方切断。对于this article,我正在尝试匹配 Obama 一词,正如您从屏幕截图中看到的那样,它会在不应该出现的位置切断。
有没有人知道发生了什么?
$(document).ready(function() {
$.get(getUrlVars()["url"],
function(data) {
var fdata = $(data);
var associationScope= 500;
$.each(getUrlVars()["topics"].split(","), function(index, value) {
if (getUrlVars()["associationScope"] == "context") {
var associationScopeRegex = "((?!</span>)[\\s\\S]{0," + associationScope + "})"
+ value + "((?!<span class=\"associationScope\">)[\\s\\S]{0," + associationScope + "})";
fdata.highlight(associationScopeRegex, {className: "associationScope"});
}
fdata.highlight(value, {className: "topicHighlight"});
});
$("#externalPage").html(fdata);
});
});
答案 0 :(得分:2)
当你通过字符串构建时,你需要转义一些正则表达式元字符(在你的情况下是反斜杠):
var associationScopeRegex = "((?!</span>)(.|\\n|\\r|\\t){0," + associationScope + "})"
+ value + "((?!<span class=\"associationScope\">)(.|\\n|\\r|\\t){0," + associationScope + "})";
当您从字符串构建正则表达式时,您必须考虑到JavaScript解析器不知道您的字符串将成为正则表达式的事实;它只是将其解析为字符串。字符串常量的语法对某些特殊字符使用反斜杠,因此这些字符将被解释为字符串的一部分。
(你不必为双引号字符的反斜杠加倍,因为将它们留作正则表达式的简单双引号是可以的。)