javascript - 为什么我的正则表达式不匹配整个文档?

标签 javascript jquery regex

我正在尝试构建一个小型 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);

    });
});

Screenshot of the highlighting result

最佳答案

当您通过字符串构建时,您需要转义一些正则表达式元字符(在您的情况下是反斜杠):

   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/

相关文章:

javascript - 使用 fusioncharts 的多类型向下钻取链接图表

javascript - SweetAlert2, .then() - 不立即更新 DOM

jquery - 确定 html 元素的可见性/真实 z-index

javascript - 自动嵌入Youtube的jQuery函数需要接受多种链接格式

r - 使用 sub 提取路径的一部分

python - 模式 : Python Regex 的意外结束

javascript - CKEditor 字符计数 (charcount) 不起作用

c# - 使用 C# 页面 .aspx 中的参数调用 Javascript 函数

jquery - 选择2个带有描述的选项

jquery - TypeError : $. fn.dataTable.moment 不是函数