首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >忽略JavaScript的RegExp匹配文本

忽略JavaScript的RegExp匹配文本
EN

Stack Overflow用户
提问于 2011-09-07 19:02:39
回答 7查看 11.9K关注 0票数 10

是否有可能与"The <strong>dog</strong> is really <em>really</em> fat!“中的”狗真的很胖“相匹配,并在它周围加上"<span class="highlight">WHAT WAS MATCHED</span>”?

我不是专门指这一点,但通常可以忽略HTML搜索文本,将其保存在最终结果中,只需在上面添加所有内容?

编辑:

考虑到HTML标记重叠的问题,是否可以匹配一个短语,并在每个匹配的单词周围添加跨度?这里的问题是,我不想让“狗”这个词在没有搜索的情况下匹配,在这里,“狗真的很胖”。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-09-07 19:40:08

更新:

这是一个能做你想做的工作的小提琴。但是,您需要更新htmlTagRegEx来处理任何HTML标记上的匹配,因为这只是执行一个简单的匹配,而不是处理所有的情况。

http://jsfiddle.net/briguy37/JyL4J/

此外,下面是代码。基本上,它一个一个地取出html元素,然后在文本中进行替换,在匹配的选择周围添加突出显示范围,然后逐个推回html元素。很难看,但这是我能想到的最简单的办法.

代码语言:javascript
运行
复制
function highlightInElement(elementId, text){
    var elementHtml = document.getElementById(elementId).innerHTML;
    var tags = [];
    var tagLocations= [];
    var htmlTagRegEx = /<{1}\/{0,1}\w+>{1}/;

    //Strip the tags from the elementHtml and keep track of them
    var htmlTag;
    while(htmlTag = elementHtml.match(htmlTagRegEx)){
        tagLocations[tagLocations.length] = elementHtml.search(htmlTagRegEx);
        tags[tags.length] = htmlTag;
        elementHtml = elementHtml.replace(htmlTag, '');
    }

    //Search for the text in the stripped html
    var textLocation = elementHtml.search(text);
    if(textLocation){
        //Add the highlight
        var highlightHTMLStart = '<span class="highlight">';
        var highlightHTMLEnd = '</span>';
        elementHtml = elementHtml.replace(text, highlightHTMLStart + text + highlightHTMLEnd);

        //plug back in the HTML tags
        var textEndLocation = textLocation + text.length;
        for(i=tagLocations.length-1; i>=0; i--){
            var location = tagLocations[i];
            if(location > textEndLocation){
                location += highlightHTMLStart.length + highlightHTMLEnd.length;
            } else if(location > textLocation){
                location += highlightHTMLStart.length;
            }
            elementHtml = elementHtml.substring(0,location) + tags[i] + elementHtml.substring(location);
        }
    }

    //Update the innerHTML of the element
    document.getElementById(elementId).innerHTML = elementHtml;
}
票数 9
EN

Stack Overflow用户

发布于 2011-09-07 19:24:23

娜雅..。只需使用好的旧RegExp ;)

代码语言:javascript
运行
复制
var htmlString = "The <strong>dog</strong> is really <em>really</em> fat!";
var regexp = /<\/?\w+((\s+\w+(\s*=\s*(?:\".*?"|'.*?'|[^'\">\s]+))?)+\s*|\s*)\/?>/gi;
var result = '<span class="highlight">' + htmlString.replace(regexp, '') + '</span>';
票数 4
EN

Stack Overflow用户

发布于 2016-02-19 19:39:58

使用JQuery的一种更简单的方法是。

代码语言:javascript
运行
复制
originalHtml = $("#div").html();

    newHtml = originalHtml.replace(new RegExp(keyword + "(?![^<>]*>)", "g"), function(e){
                      return "<span class='highlight'>" + e + "</span>";
                   });

$("#div").html(newHtml);

这对我来说很好。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7339157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档