我正在为我正在做的项目做过滤器。
我正在寻找一种方法,而不必为每个要更改的字符在不同的变量中定义所有内容。
我不想这样:
function clean(n){
var textfield = document.getElementById(n);
var regex = /</gi;
textfield.value = textfield.value.replace(regex, "<");
var regex1 = />/gi;
textfield.value = textfield.value.replace(regex1, ">");
}
该如何在不将所有内容都设置为不同变量的情况下做到这一点,以至于用一个特定字符替换一个特定字符而不是用一个特定字符替换一系列字符?
答案 0 :(得分:0)
const replaceMap = {
'<': '<',
'>': '>',
};
function escape(str) {
return Object.keys(replaceMap).reduce((result, symbol) => {
return result.replace(new RegExp(symbol, 'g'), replaceMap[symbol]);
}, str);
}
答案 1 :(得分:0)
这里有一个例子:顶部包含一些实用程序功能,旨在使您的生活更轻松
底部实现了一个自定义的转义功能,就像您要的那样,并且作为一个牺牲品,它使用了Demo的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({
'&': '&',
'<': '<',
'>': '>',
//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>