我正在尝试构建一个小型 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);
});
});
最佳答案
当您通过字符串构建时,您需要转义一些正则表达式元字符(在您的情况下是反斜杠):
var associationScopeRegex = "((?!</span>)(.|\\n|\\r|\\t){0," + associationScope + "})"
+ value + "((?!<span class=\"associationScope\">)(.|\\n|\\r|\\t){0," + associationScope + "})";
当您从字符串构建正则表达式时,您必须考虑到 JavaScript 解析器不知道您的字符串将是正则表达式这一事实;它只是将其解析为字符串。字符串常量的语法对某些特殊字符使用反斜杠,因此这些字符将被解释为字符串的一部分。
(您不必在双引号字符的反斜杠上加倍,因为可以将它们保留为正则表达式的简单双引号。)
关于javascript - 为什么我的正则表达式不匹配整个文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16115076/