Javascript 如何将选项卡替换为四个空格jQuery

Javascript 如何将选项卡替换为四个空格jQuery,javascript,jquery,replace,tabs,spaces,Javascript,Jquery,Replace,Tabs,Spaces,在您将此标记为已要求的内容之前,请继续阅读 因此,我一直在搜索web(包括StackOverflow),寻找用四个空格替换元素(更具体地说是xmp元素)中所有选项卡的方法。其目的是显示代码 如果您访问,您将看到我的代码。第一个“完全测试代码”前面有一个选项卡。第二个有四个空格。这四个空间看起来比标签更合理。我需要它将所有标签分成四个空格,这样,如果有人决定用标签隔开,它将为他们解决问题,而不是让用户自己解决问题 另一个问题是XMP将代码的第一行计算为空白,并向下移动所有内容。只有这样做才能解决这

在您将此标记为已要求的内容之前,请继续阅读

因此,我一直在搜索web(包括StackOverflow),寻找用四个空格替换元素(更具体地说是xmp元素)中所有选项卡的方法。其目的是显示代码

如果您访问,您将看到我的代码。第一个“完全测试代码”前面有一个选项卡。第二个有四个空格。这四个空间看起来比标签更合理。我需要它将所有标签分成四个空格,这样,如果有人决定用标签隔开,它将为他们解决问题,而不是让用户自己解决问题

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

<xmp><div>
我只是真的需要它来工作,而且为了修复它,我自己都疯了。我很确定这是一个愚蠢的错误。我希望如此,因为我是一个jquerynoob。有没有比使用XMP更好的方法?我对任何事情都持开放态度,任何帮助都非常感谢

致以最良好的祝愿,
Emanuel

您的脚本几乎正确,只需将其替换为4个空格,而不是1个空格

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


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

工作示例:
$('xmp').html(函数(){
返回$.trim($(this.html()).replace(/^\t/gm');
});

完全测试代码

完全测试代码

完全选项卡代码


以下代码片段应该可以很好地工作:

$('xmp').html(function () {
    return $.trim($(this).html()).replace(/^\t/gm, '    ');
});
它将用四个空格替换行首的任何制表符。因为正则表达式是用<代码> ^ < /代码>锚定的,所以它不影响行中的任何东西。

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


有一个GNU实用程序与*nix一起提供,名为
expand
,这是一种将制表符转换为空格的瑞士军刀。源代码是用C编写的,但是它很短,而且对于一个通用的tab-to-space解决方案可以有多少边缘案例,有一些有趣的见解

如果您试图在网页中显示空格,您还需要将空格替换为nbsp首先将选项卡替换为所需的空格数,然后将空格替换为nbsp

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

如果tab在一条直线中间怎么办?奇怪的是,我现在已经尝试了你的例子和亚力山大的下面的例子。仍然没有一个成功。非常非常奇怪。@EmanuelElliott他们以什么方式不工作?我的实例行得通吗?@Alexander O'Mara你的实例行得通,但即使我将你的确切代码复制到我的实例中,它仍然不起作用。也许这是我这边的问题?我在mac电脑上使用Google chome和Mamp pro网络服务器。这太不可思议了。所有的解决方案都不适合我。我已经在几种不同的设备和浏览器上试用过。我使用了你们建议的代码,但仍然没有。我甚至在我的iPad上用一个HTML编码应用程序进行了尝试。
$('xmp').html(function() {
    return this.innerHTML.substring(1).replace(/\t/g, '    ');
});
$('xmp').html(function(){
    return $.trim($(this).html()).replace(/^\t/gm, '    ');
});
$('xmp').html(function () {
    return $.trim($(this).html()).replace(/^\t/gm, '    ');
});
//replace tabs with spaces
msg=msg.replace(/\t/g, '     ');
//replace spaces with &nbsp;
msg=msg.replace(/ /g, '\u00a0');