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>