Почему этот тестер сущностей regex/DOM возвращает значение undefined?

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);

2 ответа

Проблема в том, что HTML не поддерживает XML ' Чтобы избежать проблемы, вы должны использовать ' вместо '

Для получения дополнительной информации смотрите этот пост:

Почему не стоит ' быть использованы для избежания одинарных кавычек?

Это должно делать то, что вы хотите:

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

или с положительным взглядом:

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

Я не думаю, что вам нужно HTML2text en-/decoding.

Другие вопросы по тегам