Javascript (正则表达式)仅替换<;标签>;及</标签>;?

Javascript (正则表达式)仅替换<;标签>;及</标签>;?,javascript,html,regex,Javascript,Html,Regex,我只想在和中的汉字和数字(或字母)之间插入空格 例1: 原始字符串: <div id="foo"> <div class="bar1"> <span>abcd漢字1234</span> </div> <div class="bar2"> 123漢字abcd <p>letters漢字<a href="http://example.com

我只想在
中的汉字和数字(或字母)之间插入空格


例1:

原始字符串:

<div id="foo">
    <div class="bar1">
        <span>abcd漢字1234</span>
    </div>
    <div class="bar2">
        123漢字abcd
        <p>letters漢字<a href="http://example.com/漢字1234.html">42漢字answer</a></p>
    </div>
</div>

预期结果:

<div id="foo">
    <div class="bar1">
        <span>abcd 漢字 1234</span>
    </div>
    <div class="bar2">
        123 漢字 abcd
        <p>letters 漢字<a href="http://example.com/漢字1234.html">answer 漢字 42</a></p>
    </div>
</div>


例2:

更复杂的原始字符串:

<div id="foo">
    <div class="bar1">
        <span>abcd漢字1234</span>
    </div>
    <div class="bar2">
        123漢字abcd
        <p>letters漢字<a href="http://example.com/漢字1234.html">42漢字answer</a></p>
    </div>
</div>


更新:

我找到了一个解决方案:使用XMLXPath

var current_documant = window.document;

var xpath_query = '//text()[normalize-space(.)][translate(name(..),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")!="script"][translate(name(..),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")!="style"]';

var nodes = current_documant.evaluate(xpath_query, current_documant, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

var nodes_length = nodes.snapshotLength;

for (var i = 0; i < nodes_length; ++i) {
    var current_node = nodes.snapshotItem(i);

    // http://www.w3school.com.cn/xmldom/dom_text.asp
    current_node.data = insert_space(current_node.data);
}
var current\u documat=window.document;
var xpath_query='//text()[normalize space(.)][translate(name(..),“abcdefghijklmnopqrstuvxyz”,“abcdefghijklmnopqrstuvxyz”)!=“script”][translate(name(..),“abcdefghijklmnopqrstuvxyz”,“abcdefghijklmnopqrstuvxyz”)!=“style”];
var nodes=current\u documat.evaluate(xpath\u查询,current\u documat,null,XPathResult.UNORDERED\u节点\u快照\u类型,null);
var nodes_length=nodes.snapshotLength;
对于(变量i=0;i
结果:

var test = '<a href="http://example.com/漢字1234.html">it\'s a Chinese character漢字1234</a>';
doReplace(test);
//<a href="http://example.com/漢字1234.html">it's a Chinese character 漢字 1234</a>
var测试=”;
多雷普莱斯(试验);
//

每次你用正则表达式正则化一些html,Allan Turing就会杀死一只小猫。不要用正则表达式解析hmtl-看看这个问题,然后回答html不是一种正则语言,所以正则表达式不太好用。您最好使用jQuery with
.html()
这样的库来为您完成这类工作。@Madmartigan Hm我的意思是接受答案。我想我的类型是不同的。愚蠢的人不能在HTML上使用正则表达式。有能力的人可以。有时这是正确的答案。别跛了。
function doReplace( str ) {
    var rchinese = /([\u4E00-\u9FA5]+)/g;

    var root = document.createElement("div");
    root.innerHTML = str;

    ['div', 'p', 'li', 'td', 'span', 'a', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'].forEach( function( tagName ) {
        [].forEach.call( root.getElementsByTagName( tagName ), function( elem ) {
            [].forEach.call( elem.childNodes, function( node ) {
                if( node.nodeType === 3 ) {
                    node.nodeValue = node.nodeValue.replace( rchinese, " $1 ");
                }
            });
        });
    });

    return root.innerHTML;
}
var test = '<a href="http://example.com/漢字1234.html">it\'s a Chinese character漢字1234</a>';
doReplace(test);
//<a href="http://example.com/漢字1234.html">it's a Chinese character 漢字 1234</a>