html dom 替换节点,正则表达式-从javascript dom文本节点替换

正则表达式-从javascript dom文本节点替换

我正在使用javascript处理xhtml。 我通过连接所有子节点的nodeValue来获得div节点的文本内容,其中nodeType == Node.TEXT_NODE。

生成的字符串有时包含不间断的空格实体。 如何将其替换为常规空格字符?

我的div看起来像这样...

Expires On Sep 30, 2009 06:30 AM

在网上找到以下建议不起作用:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值