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

How to replace tabs with four spaces jQuery

在将此标记为已询问之前,请继续阅读!

所以我一直在网上(包括 Whosebug)搜索一种方法来用四个 space 替换元素(更具体地说是 xmp 元素)中的所有选项卡。这样做的目的是为了展示代码。

如果你访问http://synergytechhosting.com/codeshower.html,你会看到我的代码。第一个 "totally test code" 前面有一个制表符。第二个有四个 space。四个space看起来比tab合理多了。我需要它将所有选项卡分成四个 space,这样如果有人决定 space 使用选项卡,它会为他们修复它,而不是让用户自己做。

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

<xmp><div>

而不是正常的:

<xmp>
<div>

基本上我需要这个脚本来用 4 个 space 替换制表符,并删除整个内容中的第一个 "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, '    ');
});

对于 trim 任何前导和尾随空格,使用 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, '    ');
});

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

但有些事情您可能没有考虑过:如果代码的原作者在屏幕上有 8-space 个选项卡,但代码缩进了 2 或 4 的倍数 spaces 与那些选项卡混合在一起?如果作者想缩进一个块,比方说,第 12 列,他们会做类似 [Tab] + [4 spaces] 的事情。这听起来很疯狂,但我见过一些项目(想到 Gallery2)使用制表符和 space 的组合来精细控制缩进。看,\t 字符并不按字面意思表示“8(或 4)spaces”,它表示 "jump right until the next column that is a multiple of 8 (or 4)." 因此,[Tab] + [Tab] 通常呈现相同的 on-屏幕显示为 [Tab] + [2 spaces] + [Tab],但此正则表达式将以非常不同的方式转换它。

*nix 附带了一个名为 expand 的 GNU 实用程序,它有点像将制表符转换为 space 的瑞士军刀。源代码是用 C 语言编写的,但它很短,并且有一些有趣的见解可以说明通用 tab-to-space 解决方案可能有多少边缘情况。 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');