【问题标题】:Remove tab ('\t') from string javascript从字符串 javascript 中删除制表符 ('\t')
【发布时间】:2012-02-19 12:58:04
【问题描述】:

如何从 javascript 上的任何字符串中删除标签?

当我得到我的字符串时,它是这样的缓冲区:

<Buffer 0d 0a 3c 25 72 65 73 70 6f 6e 73 65 2e 73 74 61 74 75 73 20...>

 function translate(data) {

  var content = data.toString().split('\r\n');

  }

然后我执行以下操作...

例如,我有以下几行:

 '\t\t var session = request.getSession();'
 '\t\t session["user"] = {};'

我只是希望它是:

'var session = request.getSession();'
'session["user"] = {};'

顺便说一句,当我这样做时:

content=String(content).replace('\t','');

这就是我需要 String(...) 构造函数的原因。

如果我不使用它,我会得到对象没有方法替换。

假设内容是我要解析的字符串,它按字母含义解析它:

'\t session'

变成这样:

's','e','s','s','i','o','n'

为什么?

【问题讨论】:

  • 你得到一个字符数组似乎不太可能(我无法重现它),但这可能与你使用 String() 构造函数的事实有关,这是不必要的。只需content.replace(...)
  • 你要eval那个字符串吗?
  • @FelixKling 我编辑了这个问题,你可以看到我必须有构造函数......
  • @LightnessRacesinOrbit 现已编辑

标签: javascript string parsing


【解决方案1】:

您需要一个正则表达式来替换所有匹配项;

content = content.replace(/\t/g, '');

(g 是全局标志)

/^\t+/ 仅限于替换 前导 选项卡,/^\s+/ 包括任何前导空格,这是 "\t\t var" -&gt; "var" 所需要的

更新

你还没有说缓冲区是如何接收的以及它是什么类型,我最接近的猜测虽然接收它是一件奇怪的事情;

var test_buffer_array = "\x0d \x0a \x3c \x25 \x72 \x65 \x73 \x70 \x6f \x6e \x73 \x65 \x2e \x73 \x74 \x61 \x74 \x75 \x73 \x20".split(" ")

translate(test_buffer_array);

function translate(data) {
    var content = data.join("").replace(/^\t+/gm, '');
    print(content);
}

result: "<%response.status"

【讨论】:

  • Alex,问题是我将内容作为缓冲区,通过 toString() 将其转换为字符串;所以我必须用字符串构造函数来做......还有其他想法如何处理它吗?
  • 什么是“缓冲区”?一旦你使用了toString,你就有了一个字符串,所以仍然不需要像这样使用构造函数。
  • 您应该能够var str = content.toString().replace( ... ); 您的's','e','s','s','i','o','n' 示例是显示默认不支持.replace 的Array 对象的结果 .. 如果toString() 失败,则某些东西会覆盖/重新实现一些方法,您需要提供更多 content 的详细信息
  • @AlexK。我编辑了答案以提供更多信息......如果你能看到发生了什么,如果需要更多信息,我会非常感谢你。
  • 你能准确地展示你传递给translate()的东西是什么以及它来自哪里吗? &lt;Buffer 0d 0a 3c 25 72 不是很有描述性,除非它是服务器端的东西......
【解决方案2】:

问题可能在于你如何定义content

如果content=='\t session'

`content=String(content).replace('\t','');`

暗示content==' session'

顺便说一句,String(...) 是不必要的。

`content=content.replace('\t','');`

达到相同的结果。

编辑:

String(array) 无法正常工作。

您必须在拆分字符串之前执行替换,或者分别对数组的每个元素执行替换。

代替

var content = data.toString().split('\r\n');
content=String(content).replace('\t','');

试试

var content = data.toString().replace('\t', '').split('\r\n');

请注意,replace('\t', '') 将仅替换第一次出现的 \t。要进行全局替换,请使用 RegExp Alex K. 建议:

var content = data.toString().replace(/\t/g, '').split('\r\n');

【讨论】:

  • dennis,问题是我将内容作为缓冲区,通过 toString() 将其转换为字符串;所以我必须用字符串构造函数来做......还有其他想法如何处理它吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
相关资源
最近更新 更多