Javascript: анализ текстовой области - PullRequest
0 голосов
/ 11 октября 2018

Я делаю фильтр для проекта, который я создаю.

Я ищу способ сделать это, не переходя и не определяя все в различных переменных для каждого символа, который я хочу изменить.

Я не хочу делать это следующим образом:

function clean(n){
        var textfield = document.getElementById(n);
        var regex = /</gi;
        textfield.value = textfield.value.replace(regex, "&lt;");
        var regex1 = />/gi;
        textfield.value = textfield.value.replace(regex1, "&gt;");
    }

Как бы я это сделал, не устанавливая все как разные переменные и сделав так, чтобы он заменял определенный символ другимконкретный символ, чем просто заменить диапазон символов одним конкретным символом?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

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

В нижней части реализована настраиваемая экранирующая функция, подобная той, которую вы запрашиваете, и какsamnple это берет innerHTML из Демо ? и печатает экранированный результат.

// general utilities

// returns a function that performs some replace task, ...
const replace = (needle, replacement) => value => value.replace(needle, replacement);
// ... like escaping strings for RegExp
const escapeRegExp = replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');

const sortByLengthDesc = (a, b) => b.length - a.length;
const replaceKeysWithValues = (map) => {
  return replace(
    new RegExp(Object.keys(map).sort(sortByLengthDesc).map(escapeRegExp).join("|"), "g"),
    (key) => map[key]
  );
};



// definition of the escaping to perform
const escapeTextfieldValue = replaceKeysWithValues({
  '&': '&amp;',
  '<': '&lt;',
  '>': '&gt;',
  //feel free to add more pairs to replace
});


// using document.body.innerHTML as a sample text that needs to be escaped
// and writing the result into the <pre>-tag
document.querySelector("pre").textContent = escapeTextfieldValue(document.body.innerHTML);
<h4>Escaped Text</h4>
<pre>
0 голосов
/ 11 октября 2018
const replaceMap = {
  '<': '&lt;',
  '>': '&gt;',
};

function escape(str) {
  return Object.keys(replaceMap).reduce((result, symbol) => {
    return result.replace(new RegExp(symbol, 'g'), replaceMap[symbol]);
  }, str);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...