【问题标题】:Escape less than and greater than in HTML在 HTML 中转义小于和大于
【发布时间】:2020-12-13 19:29:25
【问题描述】:

content = '5<x<div></div>'

基本上我正在寻找一个正则表达式,它将上面的字符串变成5<x<div></div>

5x<div></div> 仍将是 5x<div></div>。我只是想逃避未关闭的 html 标签

如果有这样的库,那么我会很乐意使用它,只要它满足我尝试转义未关闭的 html 标签的主要目标

【问题讨论】:

  • 好吧,我们都知道parsing HTML with regex...
  • 一开始为什么会有这个模棱两可的字符串?根据定义,事后修复模棱两可的语法……很困难。
  • 那么“要求”就有点脱离了理智的现实……
  • 给我一个正则表达式的答案,我会给你一些它会失败的 HTML。算了。
  • 你肯定不是第一个尝试缩小 NuxtJS 静态 HTML 的人。我建议您找出无效输出的原因,而不是尝试对症修复。

标签: javascript html


【解决方案1】:
  1. 用符号+唯一值重写每个打开的标记字符“
  2. 以唯一值分割字符串
  3. “replaceString ()”函数检查传递的值是否真的是一个标签……字符串中是否同时存在“”字符。如果不存在,用“& lt;”重写字符。
  4. 对符号“>”重复整个过程

这不是这个任务最漂亮的解决方案,但它确实有效。

var str = '5<x<div>s>7</div>';

for (var i = 0; i < 2; i++) {
    if (i === 0) {
        var str2 = str.replace(/</gi, ",,#*&,,<");
        var spl = str2.split(",,#*&,,");
    } else {
        var str2 = str.replace(/>/gi, ">,,#*&,,");
        var spl = str2.split(",,#*&,,");
    }
    replaceString(spl);
}

function replaceString(spl) {
    for (let i = 0; i < spl.length; i++) {
        if (spl[i].indexOf('<') > -1 && spl[i].indexOf('>') > -1) {
            //.......
        } else {
            if (spl[i].indexOf('<') > -1) {
                spl[i] = spl[i].replace(/</gi, "&lt;");
            }
            else if (spl[i].indexOf('>') > -1) {
                spl[i] = spl[i].replace(/>/gi, "&gt;");
            }
        }
    }
    str = spl.join('');
}

console.log(str);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多