【问题标题】:Trim String on both ends using javascript [duplicate]使用javascript修剪两端的字符串[重复]
【发布时间】:2013-01-08 11:48:08
【问题描述】:

可能重复:
How do I trim a string in javascript?

我有以下来自 ajax 响应的字符串

"\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\tERROR: Profile : NOT SUCCESS\nCODE        : 2\nCATEGORY    : TECHNICAL\nSEVERITY    : null\nENVIRONMENT : DEV\nAPPLICATION : DEV\nDESCRIPTION : Profile: INVOCATION UNHANDLED EXCEPTION [null]\nDESCRIPTION : Profile: [ServiceAttribute]\nDESCRIPTION : Profile: Instance ID = 20130108124231841\n\r\n\r\n"

我正在使用下面的代码来修剪两端的字符串。

var text = originalRequest.responseText.replace(/^\s+|\s+$/g, '');

但是,它正在删除来自 ajax 响应的消息之间的 \n。 我最后想要的是

"ERROR: Profile : NOT SUCCESS
CODE        : 2
CATEGORY    : TECHNICAL
SEVERITY    : null
ENVIRONMENT : DEV
APPLICATION : DEV
DESCRIPTION : Profile: INVOCATION UNHANDLED EXCEPTION [null]
DESCRIPTION : Profile: [ServiceAttribute]
DESCRIPTION : Profile: Instance ID = 20130108124231841"

我怎么得到这个?从过去 1 小时尝试不同的方式:(

【问题讨论】:

  • 如果你有 JQuery,你可以使用$.trim()。但不要仅仅为此包含 JQuery...
  • 您所拥有的不应修改字符串中的换行符; jsfiddle.net/dmwpb 确保您以符合新行的方式查看输出。

标签: javascript string trim


【解决方案1】:

只需使用trim();:

var s = "\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\tERROR: Profile : NOT SUCCESS\nCODE        : 2\nCATEGORY    : TECHNICAL\nSEVERITY    : null\nENVIRONMENT : DEV\nAPPLICATION : DEV\nDESCRIPTION : Profile: INVOCATION UNHANDLED EXCEPTION [null]\nDESCRIPTION : Profile: [ServiceAttribute]\nDESCRIPTION : Profile: Instance ID = 20130108124231841\n\r\n\r\n";
console.log(s.trim());

"ERROR: Profile : NOT SUCCESS
CODE        : 2
CATEGORY    : TECHNICAL
SEVERITY    : null
ENVIRONMENT : DEV
APPLICATION : DEV
DESCRIPTION : Profile: INVOCATION UNHANDLED EXCEPTION [null]
DESCRIPTION : Profile: [ServiceAttribute]
DESCRIPTION : Profile: Instance ID = 20130108124231841"

如果trim() 不可用(IE 8-),试试这个 polyfill:

if(!String.prototype.trim) {
    String.prototype.trim = function () { 
        return this.replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,'');
    });
}

【讨论】:

  • trim 不适用于所有浏览器(例如,ie),所以我建议使用jQuery trim
  • @lante 仅仅为此推荐 jQuery 是没有意义的!
  • @Cerbrus 根据 MDN,String.trim 使用与 OP 代码中完全相同的 replace 参数。那么,为什么结果会不同呢? developer.mozilla.org/en-US/docs/JavaScript/Reference/…
  • @lante:添加了替代方案。
  • @Rikonator:在这种情况下,导致问题的不是 OP 的代码。
【解决方案2】:

您可以先使用原生replace() 两次(重新格式化以查看 reg exp):

"\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\tERROR: Profile : NOT SUCCESS\nCODE        : 2\nCATEGORY    : TECHNICAL\nSEVERITY    : null\nENVIRONMENT : DEV\nAPPLICATION : DEV\nDESCRIPTION : Profile: INVOCATION UNHANDLED EXCEPTION [null]\nDESCRIPTION : Profile: [ServiceAttribute]\nDESCRIPTION : Profile: Instance ID = 20130108124231841\n\r\n\r\n"
     .replace(/^\s+/, "")
     .replace(/\s+$/, "")

给予:

ERROR: Profile : NOT SUCCESS
CODE        : 2
CATEGORY    : TECHNICAL
SEVERITY    : null
ENVIRONMENT : DEV
APPLICATION : DEV
DESCRIPTION : Profile: INVOCATION UNHANDLED EXCEPTION [null]
DESCRIPTION : Profile: [ServiceAttribute]
DESCRIPTION : Profile: Instance ID = 20130108124231841

【讨论】:

  • 我仍然收到相同的消息。它应该保留在文本之间的 \n 或者它应该在视图中用正确的 enter(next line) 替换 \n
  • 我使用 Windows 7,并在 Google Chrome 控制台上的 W7 中尝试过。在其他系统上,行尾字符可能不同,因此可能需要不同的 reg exp。我会从这个开始。你得到什么信息?
【解决方案3】:

出于某种奇怪的原因,我不太喜欢正则表达式。只要有可能,我就会尝试寻找其他方法。对于那些分享我的观点的人,这里是纯 JavaScript 代码,用于根据您的字符列表自定义修剪字符串:

function MyTrim(text) {
    //turn into a string in case it's other type:
    var result = text + "";

    //trim leading characters:
    while (result.length > 0 && IsWhiteSpace(result[0]))
        result = result.substr(1, result.length - 1);

    //trim trailing characters:
    while (result.length > 0 && IsWhiteSpace(result[result.length - 1]))
        result = result.substr(0, result.length - 1);

    return result;
}

function IsWhiteSpace(c) {
    return c == " " || c == "\r" || c == "\n" || c == "\t";
}

在你的情况下:

var text = MyTrim(originalRequest.responseText);

Live test case.

【讨论】:

  • @Cerbrus 很容易添加,是的.. 你碰巧知道任何将字符识别为空格的原生 JS 方法?
  • 我认为没有String.isWhiteSpace 函数。不过,检查"\t" 应该可以解决问题:P
  • 我这样称呼 var text = MyTrim(originalRequest.responseText);但我仍然将文本作为原始文本(至少在 IE 调试中)和输出页面中没有输入。 :(
  • @NitinGurram 抱歉,忘记删除制表符。现在试试..
  • @NitinGurram 您需要replace 是全球性的。 text.replace(/\n/g, "<br />") 应该可以解决问题。 jsfiddle.net/EYaZc/1
猜你喜欢
  • 2014-03-26
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 2018-12-25
  • 2010-10-04
  • 1970-01-01
  • 2017-01-02
相关资源
最近更新 更多