replace  从JavaScript DOM文本节点
我正在处理使用JavaScript的xhtml。 我通过连接nodeType == Node.TEXT_NODE的所有子节点的nodeValue来获取div节点的文本内容。
结果string有时包含一个不间断的空间实体。 我如何用普通的空格字符replace它?
我的div看起来像这样…
<div><b>Expires On</b> Sep 30, 2009 06:30 AM</div>
以下在networking上发现的build议无效:
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]; }) ); } })();
有什么build议么?
这比你做得容易得多。 文本节点不会有文字string" "
在它里面,它会有代码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, " ");
如果您只需要更换
那么你可以使用一个更简单的正则expression式:
var textWithNBSpaceReplaced = originalText.replace(/ /g, ' ');
另外,你的div例子中有一个错字,它说&nnbsp;
而不是
。
我想当你用“ var foo = function() {...};
”定义一个函数的时候,函数只能在那行之后定义。 换句话说,试试这个:
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);
编辑 :另外,只有在第一次声明一个variables(在cleanText
variables上使用它两次)时才使用“ var
”。
编辑2 :问题是函数名称的拼写。 你有“var replaceHtml Entites =”。 它应该是“var replaceHtml Entit i 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]; }) ); };
试试这个…..这对我有效
第一行很搞乱。 它只需要是:
var cleanText = text.replace(/\xA0/g,' ');
这应该是你需要的一切。
删除&
和之间的所有内容 所有这些符号都有。 如果你想摆脱他们。
text.replace(/&.*;/g,'');
- 正则expression式,用大写字母拆分string,但忽略TLA
- Perl正则expression式的“o”修饰符是否仍然可以提供任何好处?
- 如何从Javainput文本中删除标点符号?
- RegExp的exec()函数和String的match()函数有什么区别?
- 如何从一个string中提取数字并获取一个int数组?
- 如何分割字母和数字(或数字和字母之间)的string?
- 用Javascript中的大写replace正则expression式捕获组
- 如何parsingCSVstring,其中包含数据中的逗号?
- C#,正则expression式:如何parsing逗号分隔的值,其中一些值可能被引用的string本身包含逗号