Regex for new line在textarea jQuery中不工作

zbsbpyhn  于 2023-05-19  发布在  jQuery
关注(0)|答案(1)|浏览(174)

我试图转换从路由器,包括多个\r\n到新的行复制返回的输出是作为漂亮的结果配置缩进用户从UI查看。但是我下面的脚本不起作用。我从谷歌上参考了一些参考资料,也没有多大帮助。有人有解决办法吗?目前我使用MacOS平台和最新的Chrome开发。
示例输出

{
  "status": "success",
  "output": {
    "ipv4_address": "xxx/xx",
  },
  "ne_response": "... \r\r\n--- {master}\r\nRouter@xyz> show ... inet address xxx/30\r\n\r\n{master}\r\nRouter@xyz> "
}

电流输出(\r\n不工作)

超文本标记语言

<textarea class="form-control" id="viewConfig"></textarea>

jQuery(所有不转换为新行)

$("#viewConfig").on("keyup", function(){
    var vConfig = $("#viewConfig").val().replace(/\r\n|\r|\n/g, "\\n"); // double backslash not working
    var vConfig = $("#viewConfig").val().replace(/\r\n|\r|\n/g, "\n"); // single backslash not working
    $('#viewConfig').html(vConfig);
});

$("#viewConfig").on("keyup", function(){
    var vConfig = $('#viewConfig').val().replace(/\n/g, "\\n"); // double backslash not working
    var vConfig = $('#viewConfig').val().replace(/\n/g, "\n"); // single backslash not working
    $('#viewConfig').html(vConfig);
});

$("#viewConfig").on("keyup", function(){
    var vConfig = $("#viewConfig").val().replace(/[\r\n]+/gm, "&#13;&#10;");
    $('#viewConfig').html(vConfig);
});
zlwx9yxi

zlwx9yxi1#

IIUC,你实际上要做的是用一个\n替换多次出现的\r\n。您可以使用正则表达式[\r\n]+来实现这一点,它将匹配一个或多个\r\n字符。然后可以用一个换行符"\n"替换它。请注意,在引用文本区域时,需要替换val,而不是html
在下面的文本框中键入字符以查看效果:

$("#viewConfig").val("... \r\r\n--- {master}\r\nRouter@xyz> show ... inet address xxx/30\r\n\r\n{master}\r\nRouter@xyz> ")

$("#viewConfig").on("keyup", function(){
    var vConfig = $(this).val().replace(/[\r\n]+/g, "\n");
    $(this).val(vConfig);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea class="form-control" id="viewConfig" rows="10" cols="30"></textarea>

注意,您可以简单地使用$(this)在事件处理程序中引用$("#viewConfig")(请参阅manual)。

相关问题