查找并替换引号内的文本忽略html标记

Ali*_*Ali 4 javascript regex jquery

我有HTML标签的简单文本和引号中的一些文本我想在引号内的文本上添加span.例如:

<p>A quick "brown" fox "jumps" over <a href="www.gamescottage.com">the</a> lazy dog.</p>
Run Code Online (Sandbox Code Playgroud)

我想要将此行更改为以下内容:

<p>A quick "<span>brown</span>" fox "<span>jumps</span>" over <a href="www.gamescottage.com">the</a> lazy dog.</p>
Run Code Online (Sandbox Code Playgroud)

我正在使用此代码执行此操作:

<script>
    $('document').ready(function (){
        var text = $('p').html();
        text = text.replace(/"(.*?)"/g, '"<span class="quote">$1</span>"');
        $('p').html(text);
     });
</script>
Run Code Online (Sandbox Code Playgroud)

但它取代了HTML锚标记的引用以及任何解决方案?简而言之,我只想添加span内部引号,忽略HTML标记的引号.

Ben*_*aum 6

JavaScript已经为你构建了一个内置的DOM解析器 - 而不是试图用正则表达式来解析HTML本身很困难且边缘不可能 - 你可以使用DOM为你带来的内置功能.在你的情况下,我将使用jQuery演示它,但非jQuery解决方案同样简单:

$("p"). // all p tags
contents(). // select the actual contents of the tags 
filter(function(i,el){   return el.nodeType === 3; }). // only the text nodes
each(function(i, el){ 
    var $el = $(el); // take the text node as a jQuery element
    var replaced = $el.text().replace(/"(.*?)"/g,'<span>"$1"</span>') // wrap
    $el.replaceWith(replaced); // and replace
});
Run Code Online (Sandbox Code Playgroud)

这是一个小提琴.