JavaScript regex заменяет символы HTML

Если бы Вы пытаетесь использовать универсальный Словарь в C# как Вы, использовал бы ассоциативный массив на другом языке:

foreach(var item in myDictionary)
{
  foo(item.Key);
  bar(item.Value);
}

Или, если только необходимо выполнить итерации по набору ключей, использование

foreach(var item in myDictionary.Keys)
{
  foo(item);
}

И наконец, если Вы только интересуетесь значениями:

foreach(var item in myDictionary.Values)
{
  foo(item);
}

(Обращают внимание, что var ключевое слово является дополнительным C# 3.0 и выше функции, Вы могли также использовать точный тип своих ключей/значений здесь)

5
задан wp78de 15 May 2018 в 02:16
поделиться

3 ответа

Я думаю, что вы можете использовать функции из вопроса по немного другой теме ( Эффективно заменить все символы с диакритическими знаками в строке? ).

В ответе Джейсона Бантинга есть несколько хороших идей + необходимое объяснение, вот его решение с некоторыми модификациями, чтобы вы начали ( если вы сочтете это полезным, также проголосуйте за его исходный ответ, так как это его код, по сути ).

var replaceHtmlEntites = (function() {
    var translate_re = /&(nbsp|amp|quot|lt|gt);/g,
        translate = {
            'nbsp': String.fromCharCode(160), 
            'amp' : '&', 
            'quot': '"',
            'lt'  : '<', 
            'gt'  : '>'
        },
        translator = function($0, $1) { 
            return translate[$1]; 
        };

    return function(s) {
        return s.replace(translate_re, translator);
    };
})();

вызывается как

var stringToMatch = "This string has special chars &amp; and &amp;nbsp;";
var stringOutput  = replaceHtmlEntites(stringToMatch);

Нумерованные объекты еще проще, вы можете заменить их в более общем виде, используя небольшую математику и String.fromCharCode () .


Другой, гораздо более простой вариант - это (работает в любом браузере)

function replaceHtmlEntites(string) {
    var div = document.createElement("div");
    div.innerHTML = string;
    return div.textContent || div.innerText;
}

replaceHtmlEntites("This string has special chars &lt; &amp; &gt;");
// -> "This string has special chars < & >"
17
ответ дан 18 December 2019 в 07:55
поделиться

Другой способ - создать объект div

var tmp = document.createElement("div");

Затем присвоить текст его внутреннему HTML

tmp.innerHTML = mySpecialString;

И, наконец, чтение текстового содержимого элемента

var output = tmp.textContent || tmp.innerText //for IE compatibility

И вот ...

2
ответ дан 18 December 2019 в 07:55
поделиться

Вы можете использовать замену на основе функций, чтобы делать то, что вы хотите:

var myString = '&'+'nbsp;&'+'nbsp;&tab;&copy;';
myString.replace(/&\w+?;/g, function( e ) {
    switch(e) {
        case '&nbsp;': 
            return ' ';
        case '&tab;': 
            return '\t';
        case '&copy;': 
            return String.fromCharCode(169);
        default: 
            return e;
    }
});

Однако я настоятельно призываю вас рассмотреть вашу ситуацию. Если вы получаете & nbsp; и & копировать; и другие объекты HTML в текстовых значениях, вы действительно хотите их заменить? Стоит ли конвертировать их потом?

Просто запомните.

Ура!

1
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: