Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换&;nbsp;从javascript dom文本节点_Javascript_Regex_Html Entities - Fatal编程技术网

替换&;nbsp;从javascript dom文本节点

替换&;nbsp;从javascript dom文本节点,javascript,regex,html-entities,Javascript,Regex,Html Entities,我正在使用javascript处理xhtml。我通过连接nodeType==node.text\u节点中所有子节点的nodeValue来获取div节点的文本内容 结果字符串有时包含一个不间断的空格实体。如何将其替换为常规空格字符 我的部门看起来像这样 于2009年9月30日上午6:30到期 在web上找到的以下建议无效: var cleanText = text.replace(/^\xa0*([^\xa0]*)\xa0*$/g,""); var cleanText = replaceHtm

我正在使用javascript处理xhtml。我通过连接nodeType==node.text\u节点中所有子节点的nodeValue来获取div节点的文本内容

结果字符串有时包含一个不间断的空格实体。如何将其替换为常规空格字符

我的部门看起来像这样

于2009年9月30日上午6:30到期

在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];
    }) );
  }
})();
var cleanText=text.replace(/^\xa0*([^\xa0]*)\xa0*$/g,”);
var cleanText=replacethtmlentities(text);
var replaceThMLentites=(函数(){
var translate_re=/&(amp|quot|lt|gt);/g;
变量转换={
“nbsp”:“,
“amp”:“&”,
“quot”:“\”,
“lt”:”
};
返回函数{
返回(s.replace(翻译、函数(匹配、实体){
返回翻译[实体];
}) );
}
})();
有什么建议吗?

我想当你用“
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);
var replacethtmlentites=(函数(){
var translate_re=/&(amp|quot|lt|gt);/g;
变量转换={
“nbsp”:“,
“amp”:“&”,
“quot”:“\”,
“lt”:”
};
返回函数{
返回(s.replace(翻译、函数(匹配、实体){
返回翻译[实体];
}) );
}
})();
var cleanText=text.replace(/^\xa0*([^\xa0]*)\xa0*$/g,”);
cleanText=替换HtmlEntities(文本);
编辑:此外,仅在第一次声明变量时使用“
var
”(在
cleanText
变量上使用它两次)


编辑2:问题在于函数名的拼写。您有“var replacethtmlentites=”。它应该是“var replacethtmlentities=“

如果您只需要替换
,那么您可以使用更简单的正则表达式:

var textWithNBSpaceReplaced=originalText.replace(//g',)


此外,您的div示例中还有一个输入错误,上面写着
&nnbsp而不是

这比你做的要容易得多。文本节点中不包含文本字符串
“”
,而是包含代码为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, " ");

那第一行很乱。它只需要:

var cleanText = text.replace(/\xA0/g,' ');

这应该就是你所需要的了。

我用了这个,它起了作用:

var cleanText = text.replace(/&amp;nbsp;/g,"");
var text=”“&;";
text=text.replaceThMLentites();
String.prototype.replaceThMLENTES=函数(){
var s=此;
var translate_re=/&(amp|quot|lt|gt);/g;
var translate={“nbsp”:“amp”:“和”,“quot”:“\”,“lt”:“};
返回(s.replace(翻译、函数(匹配、实体){
返回翻译[实体];
}) );
};

试试这个……这对我很有效

删除了
&
之间的所有内容所有这些符号都有。如果你想摆脱他们

text.replace(/&.*;/g,'');

对我来说,替换不起作用。。。 请尝试以下代码:

str = str.split("&quot;").join('"');

破解这个问题的一种方法是用两个或更多的空格替换任何空行,并使用一些换行符和令牌。然后发布降价,用换行符替换段落

//将空行替换为“空行”
rawMdText=rawMdText.replace(/\n+(?=\n)/g,“\n\nEMPTY\u行\n”);
//将
放在任何其他行的末尾,带有两个空格 rawMdText=rawMdText.replace(/+\n/,“
\n”); //解析 让rawHtml=markdownParse(rawMdText); //对于以换行符结尾的任何段落(如上所述) //和之后是多个空行,导致 //另一段,把它们浓缩成一段 mdHtml=mdHtml。替换(/(
\s*\s*)(空行\s*)+()/g,(匹配)=>{ 返回match.match(/EMPTY_LINE/g).map(()=>“
”).join(“”); }); //对于基本换行符,只需替换它们即可 mdHtml=mdHtml.replace(/空行/g,“
”);
这样做的目的是找到每一行只有两个空格+的新行。它使用“向前看”,以便在下一次替换时从正确的位置开始,在没有该选项的情况下,它将在一行中断开两行

然后markdown将这些行解析为只包含标记“EMPTY_LINE”的段落。因此,您可以遍历rawHtml并用换行符替换它们

另外,replace函数会将所有换行段落压缩为一个上下段落(如果存在)

实际上,您可以这样使用它:

A line with spaces at end  
  
  
and empty lines with spaces in between will condense into a multi-line paragraph.

A line with no spaces at end
  
  
and lines with spaces in between will be two paragraphs with extra lines between.
结果是:


末尾带有空格的行


中间有空格的空行将压缩为多行段落。

末端没有空格的线



中间有空格的行将是两个段落之间有额外的行


&nnbsp;
”您的数据不是问题所在。。。是吗?我把输入错误放在我的后堆栈溢出中,在后预览中将实体转换为实际的空间。如果我使用,它看起来像是函数名中的输入错误。请参阅对我的问题的编辑。这是如何与CDATA块中的字符串交互的(因为这是XHTML)?它并没有真正涵盖这种情况。如果有必要这么做,正则表达式可能是错误的解决方案。我在堆栈后溢出中输入了拼写错误,在后期预览中将实体转换为实际空间。如果我在Firebug中检查变量时使用,我看不到-字符串看起来像是有效日期。使用UTF8编码在十六进制编辑器中粘贴该值表明,nbsp已被一个2字节的unicode字符替换\uc2A0是的,在我的脚本中,我在使用它的位置之前有一个函数。我在这里发帖的时候忘了把它弄成那样。但是没用。谢谢你,蒂姆。这是有效的,并且证明比我做的更容易:)这比公认的答案更简单。谢谢。如果在多个地方有,那么所有匹配的刺都将被回复
A line with spaces at end  
  
  
and empty lines with spaces in between will condense into a multi-line paragraph.

A line with no spaces at end
  
  
and lines with spaces in between will be two paragraphs with extra lines between.