如何用四个空格替换制表符 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
msg=msg.replace(/ /g, '\u00a0');
在将此标记为已询问之前,请继续阅读!
所以我一直在网上(包括 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
msg=msg.replace(/ /g, '\u00a0');