用于可见文本的正则表达式,而不是HTML

Osc*_*son 6 html javascript regex jquery

如果我有一个字符串:

hey <a href="#user">user</a>, what are you doing?
Run Code Online (Sandbox Code Playgroud)

如何,正则表达式可以说:寻找user,但不是内部<>字符?因此匹配将抓住用户之间<a></a>但不是内部的用户href

我希望这适用于任何标签,所以它不重要什么标签.

==更新==

为什么我不能使用.text()或innerText是因为这用于突出显示结果很像浏览器中的本机cmd/ctrl + f功能,我不想丢失格式.例如,如果我在strong这里搜索:

Some <strong>strong</strong> text.
Run Code Online (Sandbox Code Playgroud)

如果我使用.text()它将返回"一些强文本",然后我将strong包含一个<span>具有样式类,但现在当我回去并尝试将其插入DOM时,它将丢失<strong>标签.

Fel*_*ing 7

如果您打算html()再次使用HTML替换,那么您将丢失可能绑定到内部元素及其内容的所有事件处理程序data(正如我在评论中所述).

每当您将元素的内容设置为HTML字符串时,您就是在创建新元素.

将递归地应用于每个文本节点可能更好.就像是:

$.fn.highlight = function(word) {
    var pattern = new RegExp(word, 'g'),
        repl = '<span class="high">' + word + '</span>';

    this.each(function() {
        $(this).contents().each(function() {
            if(this.nodeType === 3 && pattern.test(this.nodeValue)) {
                $(this).replaceWith(this.nodeValue.replace(pattern, repl));
            }
            else if(!$(this).hasClass('high')) {
                $(this).highlight(word);
            }
        });
    });
    return this;
};
Run Code Online (Sandbox Code Playgroud)

DEMO

很可能这不是很有效率.


小智 -1

此代码将从 sting 中删除所有标签

var s = 'hey <a href="#user">user</a>, what are you doing?';
s = s.replace(/<[^<>]+>/g,'');
Run Code Online (Sandbox Code Playgroud)

  • [不。这是不会的。](http://stackoverflow.com/questions/701166/can-you-provide-some-examples-of-why-it-is-hard-to-parse-xml-and-html-with-a -雷格) (3认同)