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 に答える