1
var str = 'let us pretend that this is a blog about gardening&cooking; here's an apostrophe & ampersand just for fun.';

这是我正在操作的字符串。期望的最终结果是:"let us pretend that this is a blog about gardening&cooking; here's an apostrophe & ampersand just for fun."

console.log('Before: ' + str);


str = str.replace(/&(?:#x?)?[0-9a-z]+;?/gi, function(m){
  var d = document.createElement('div');
  console.log(m);
  d.innerHTML = m.replace(/&/, '&');
  console.log(d.innerHTML + '|' + d.textContent);
  return !!d.textContent.match(m.replace(/&/, '&')[0]) ? m : d.textContent;
});


console.log('After: ' + str);
4

2 回答 2

1

问题是 HTML 不支持 XML' 为了避免这个问题,你应该使用'而不是'

有关更多信息,请查看此帖子:

为什么不'应该用来转义单引号?

于 2012-09-24T17:41:21.753 回答
0

这应该做你想要的:

str.replace(/&([#x]\d+;|[a-z]+;)/g, "&$1")

或者,具有积极的前瞻性:

str.replace(/&(?=[#x]\d+;|[a-z]+;)/g, "&")

我认为您不需要任何 HTML2text 编码/解码。

于 2012-09-24T17:55:13.800 回答