正则表达式-从javascript dom文本节点替换
我正在使用javascript处理xhtml。 我通过连接所有子节点的nodeValue来获得div节点的文本内容,其中nodeType == Node.TEXT_NODE。
生成的字符串有时包含不间断的空格实体。 如何将其替换为常规空格字符?
我的div看起来像这样...
在网上找到以下建议不起作用:
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];
}) );
}
})();
有什么建议么?
8个解决方案
114 votes
这比您做起来容易得多。 文本节点中将没有文字字符串" ",它将具有代码为160的相应字符。
function replaceNbsps(str) {
var re = new RegExp(String.fromCharCode(160), "g");
return str.replace(re, " ");
}
textNode.nodeValue = replaceNbsps(textNode.nodeValue);
更新
更简单:
textNode.nodeValue = textNode.nodeValue.replace(/\u00a0/g, " ");
Tim Down answered 2019-12-30T17:35:03Z
25 votes
如果只需要替换&nnbsp;,则可以使用更简单的正则表达式:
&nnbsp;
另外,您的div示例中有一个错字,它说的是&nnbsp;,而不是 。
bobbymcr answered 2019-12-30T17:35:32Z
8 votes
第一行很混乱。 它只需要是:
var cleanText = text.replace(/\xA0/g,' ');
那应该是您所需要的。
brianary answered 2019-12-30T17:35:56Z
6 votes
我认为,当您使用“ var”定义函数时,该函数仅在该行之后定义。 换句话说,请尝试以下操作:
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:问题是函数名称的拼写。 您具有“ var replaceHtmlEntites =“。 它应该是“ var replaceHtmlEntities =“
Kip answered 2019-12-30T17:36:25Z
4 votes
我用这个,它的工作原理:
var cleanText = text.replace(/ /g,"");
mohamida answered 2019-12-30T17:36:45Z
4 votes
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" : ""};
return ( s.replace(translate_re, function(match, entity) {
return translate[entity];
}) );
};
试试这个.....这对我有用
Amit Sharma answered 2019-12-30T17:37:04Z
1 votes
删除所有&和268082697905792727169之间所有此类符号所具有的内容。 如果您想摆脱他们。
text.replace(/&.*;/g,'');
Andi Giga answered 2019-12-30T17:37:24Z
0 votes
对我来说替换不起作用...试试这个代码:
str = str.split(""").join('"');
לבני מלכה answered 2019-12-30T17:37:44Z