转义除 html 标签之外的自定义标签
Escape custom tags except html tags
我想转义自定义标签,但 HTML 标签除外,例如粗体、粗体、斜体。
Input: "Hello World! <notification>Name</notification><nat>Nat tag</nat> <strong>This should be strong</strong><nas>Nas Tag</nas>"
Output: Hello World! <notification>Name</notification> <nat>Nat tag</nat>**This should be strong**<nas> Nas Tag</nas>
string.replace(//g, ">")
.replace(/"/g, """).replace(/'/g, "'")
.replace(/<(?!/?strong>)[^>]+>/g, '')
我尝试用上面的替换,但它也在替换 <strong> with < strong >
任何帮助将不胜感激。
最好有一个允许标签的白名单,并“转义”任何不在列表中的标签。像这样的东西适用于简单的实现,但一般来说,regex is not a good tool for parsing HTML.
var input = "Hello World! <notification asdfasd=asd>Name</notification><nat>Nat tag</nat> <strong>This should be strong</strong><nas>Nas Tag</nas>"
var output = escapeCustomTags(input, ['strong'])
console.log(output);
function escapeCustomTags(input, allowed_tags = []) {
// Make allowed tags array lower case
allowed_tags = allowed_tags.map(c => c.toLowerCase());
// Output is the input, edited
var output = input;
// Attempt to match an opening or closing HTML tag
var reg = /<\/?([a-zA_Z0-9]*)[^>]*?>/g;
// An array that will contain all disallowed tags
var disallowed_tags = [];
// For each tag in the input, if it's allowed, skip
// Else, add it to the array.
var match;
while ((match = reg.exec(input)) !== null) {
if (allowed_tags.includes(match[1].toLowerCase())) continue;
disallowed_tags.push(match[0]);
}
// Replace each disallowed tag with the "escaped" version
disallowed_tags.forEach(tag => {
var find = tag;
var replace = tag.replace('<', '<').replace('>', '>');
output = output.replace(find, replace)
});
return output;
}
我想转义自定义标签,但 HTML 标签除外,例如粗体、粗体、斜体。
Input: "Hello World! <notification>Name</notification><nat>Nat tag</nat> <strong>This should be strong</strong><nas>Nas Tag</nas>"
Output: Hello World! <notification>Name</notification> <nat>Nat tag</nat>**This should be strong**<nas> Nas Tag</nas>
string.replace(//g, ">")
.replace(/"/g, """).replace(/'/g, "'")
.replace(/<(?!/?strong>)[^>]+>/g, '')
我尝试用上面的替换,但它也在替换 <strong> with < strong >
任何帮助将不胜感激。
最好有一个允许标签的白名单,并“转义”任何不在列表中的标签。像这样的东西适用于简单的实现,但一般来说,regex is not a good tool for parsing HTML.
var input = "Hello World! <notification asdfasd=asd>Name</notification><nat>Nat tag</nat> <strong>This should be strong</strong><nas>Nas Tag</nas>"
var output = escapeCustomTags(input, ['strong'])
console.log(output);
function escapeCustomTags(input, allowed_tags = []) {
// Make allowed tags array lower case
allowed_tags = allowed_tags.map(c => c.toLowerCase());
// Output is the input, edited
var output = input;
// Attempt to match an opening or closing HTML tag
var reg = /<\/?([a-zA_Z0-9]*)[^>]*?>/g;
// An array that will contain all disallowed tags
var disallowed_tags = [];
// For each tag in the input, if it's allowed, skip
// Else, add it to the array.
var match;
while ((match = reg.exec(input)) !== null) {
if (allowed_tags.includes(match[1].toLowerCase())) continue;
disallowed_tags.push(match[0]);
}
// Replace each disallowed tag with the "escaped" version
disallowed_tags.forEach(tag => {
var find = tag;
var replace = tag.replace('<', '<').replace('>', '>');
output = output.replace(find, replace)
});
return output;
}