如何将制表符替换为四个空格 jQuery

How to replace tabs with four spaces jQuery

本文关键字:四个 空格 jQuery 制表符 替换      更新时间:2023-09-26

在你把这个问题标记为已经问过之前,请继续阅读!

所以我一直在网络上搜索(包括 StackOverflow),寻找一种用四个空格替换元素(更具体地说是 xmp 元素)中所有选项卡的方法。这样做的目的是显示代码。

如果你访问 http://synergytechhosting.com/codeshower.html,你会看到我的代码。第一个"完全测试代码"前面有一个选项卡。第二个有四个空格。这四个空格看起来比制表符更合理。我需要它将所有选项卡分成四个空格,以便如果有人决定使用选项卡间隔,它将为他们修复它,而不是让用户自己做。

另一个问题是XMP将代码的第一行计为空白,并将所有内容向下移动。这只能通过这样做来解决:

<xmp><div>

而不是正常:

<xmp>
<div>

基本上我需要这个脚本来替换每个带有 4 个空格的选项卡,并删除整个事情中的第一个"enter"。

我已经在使用它来修复选项卡,但它似乎不起作用。

$('xmp').html(function() {
    return this.innerHTML.replace(/'t/g, ' ');
});

我只是真的需要这个来工作,并且已经让我自己发疯试图解决这个问题。我很确定这是一个非常愚蠢的错误。我希望这样,因为我是一个jQuery菜鸟。有没有比使用 XMP 更好的方法?我对任何事情都持开放态度,任何帮助都非常感谢。

此致敬意伊曼纽尔

你的脚本几乎是正确的,只需要用 4 个空格代替 1 个空格

要删除第一个换行符,只需从字符串中删除第一个字符

$('xmp').html(function() {
    return this.innerHTML.substring(1).replace(/'t/g, '    ');
});

要修剪任何前导和尾随空格,请使用 jQuery.trim 。若要将代码从制表符重新缩进到空格,而不影响代码行内出现的制表符,请匹配字符串的开头 ( ^ ),并使用多行标志 ( m )。

$('xmp').html(function(){
    return $.trim($(this).html()).replace(/^'t/gm, '    ');
});

工作示例:

$('xmp').html(function(){
    return $.trim($(this).html()).replace(/^'t/gm, '    ');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<xmp>
<div>
	<p>totally test code</p>
    <p>totally test code</p>
    <p>totally tab	code</p>
</div>
</xmp>

以下代码片段应该足够好用:

$('xmp').html(function () {
    return $.trim($(this).html()).replace(/^'t/gm, '    ');
});

它将用四个空格替换行首的任何制表符。因为正则表达式是用^锚定的,所以它不应该影响行中间的任何内容。

但这里有

一些你可能没有考虑过的事情:如果代码的原始作者在屏幕上有 8 个空格的制表符,但缩进代码时与这些制表符混合了 2 或 4 个空格的倍数,该怎么办?如果作者想将块缩进到第 12 列,他们会做类似 [Tab] + [4 spaces] .这听起来很疯狂,但我见过一些项目(我想到了 Gallery2)使用制表符和空格的组合来精细控制缩进。看,'t字符的字面意思不是"8(或 4)个空格",而是"向右跳到下一列是 8(或 4)的倍数"。正因为如此,[Tab] + [Tab]通常在屏幕上呈现与[Tab] + [2 spaces] + [Tab]相同的内容,但此正则表达式的转换方式将非常不同。

有一个 GNU 实用程序附带 *nix 称为 expand,有点像将制表符转换为空格的瑞士军刀。源代码是 C 语言,但它很短,并且对于通用制表符到空格解决方案可能有多少边缘情况有一些有趣的见解。http://git.savannah.gnu.org/cgit/coreutils.git/plain/src/expand.c

如果您尝试在网页中显示空格,则还需要将空格替换为nbsp 首先将制表符替换为所需的空格数,然后用nbsp替换空格

//replace tabs with spaces
msg=msg.replace(/'t/g, '     ');
//replace spaces with &nbsp;
msg=msg.replace(/ /g, ''u00a0');