JavaScriptを使用してxhtmlを処理しています。 nodeType == Node.TEXT_NODEであるすべての子ノードのnodeValueを連結して、divノードのテキストコンテンツを取得しています。
結果の文字列には、改行しないスペースエンティティが含まれることがあります。これを通常のスペース文字に置き換えるにはどうすればよいですか?
私のdivはこのように見えます...
<div><b>Expires On</b> Sep 30, 2009 06:30 AM</div>
Webで見つかった次の提案は機能しませんでした。
var cleanText = text.replace(/^\xa0*([^\xa0]*)\xa0*$/g,"");
var cleanText = replaceHtmlEntities(text);
var replaceHtmlEntites = (function() {
var translate_re = /&(nbsp|amp|quot|lt|gt);/g;
var translate = {
"nbsp": " ",
"amp" : "&",
"quot": "\"",
"lt" : "<",
"gt" : ">"
};
return function(s) {
return ( s.replace(translate_re, function(match, entity) {
return translate[entity];
}) );
}
})();
助言がありますか?
これは、作成するよりもはるかに簡単です。テキストノードにはリテラル文字列" "
は含まれず、コード160に対応する文字が含まれます。
function replaceNbsps(str) {
var re = new RegExp(String.fromCharCode(160), "g");
return str.replace(re, " ");
}
textNode.nodeValue = replaceNbsps(textNode.nodeValue);
[〜#〜] update [〜#〜]
さらに簡単:
textNode.nodeValue = textNode.nodeValue.replace(/\u00a0/g, " ");
_
_のみを置き換える必要がある場合は、はるかに単純な正規表現を使用できます。
var textWithNBSpaceReplaced = originalText.replace(/ /g, ' ');
また、divの例にはタイプミスがあり、_&nnbsp;
_ではなく_
_と表示されます。
その最初の行はかなりめちゃくちゃです。次のことだけが必要です。
var cleanText = text.replace(/\xA0/g,' ');
必要なのはこれだけです。
Ithink「var foo = function() {...};
」で関数を定義すると、その関数は定義されるだけです afterその行。言い換えれば、これを試してください:
var replaceHtmlEntites = (function() {
var translate_re = /&(nbsp|amp|quot|lt|gt);/g;
var translate = {
"nbsp": " ",
"amp" : "&",
"quot": "\"",
"lt" : "<",
"gt" : ">"
};
return function(s) {
return ( s.replace(translate_re, function(match, entity) {
return translate[entity];
}) );
}
})();
var cleanText = text.replace(/^\xa0*([^\xa0]*)\xa0*$/g,"");
cleanText = replaceHtmlEntities(text);
編集:また、変数を最初に宣言するときにのみ「var
」を使用します(cleanText
変数で2回使用します)。
編集2:問題は、関数名のスペルです。 「var replaceHtml権力 = "。" var replaceHtmlである必要がありますエンティット私es = "
私はこれを使用し、それは働いた:
var cleanText = text.replace(/&nbsp;/g,"");
var text = "" &<>";
text = text.replaceHtmlEntites();
String.prototype.replaceHtmlEntites = function() {
var s = this;
var translate_re = /&(nbsp|amp|quot|lt|gt);/g;
var translate = {"nbsp": " ","amp" : "&","quot": "\"","lt" : "<","gt" : ">"};
return ( s.replace(translate_re, function(match, entity) {
return translate[entity];
}) );
};
これを試してください.....これは私のために働いた
&
と;
の間のすべてのシンボルを削除します。あなたがそれらを取り除きたい場合は。
text.replace(/&.*;/g,'');
私にとっては置き換えが機能しません...このコードを試してください:
str = str.split(""").join('"');