Обрезать строку с обоих концов с помощью javascript

Возможный дубликат:
Как мне обрезать строку в 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, '');

Однако он удаляет \ n между сообщениями, которые поступают из ответа ajax. В конце концов, я бы хотел

"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"

как мне это получить? Пробуем разные способы за последний час :(


person Reddy    schedule 08.01.2013    source источник
comment
Если у вас есть JQuery, вы можете использовать $.trim(). Но не включайте JQuery только для этого ...   -  person nfechner    schedule 08.01.2013
comment
То, что у вас есть, не должно изменять новые строки внутри строки; jsfiddle.net/dmwpb убедитесь, что вы просматриваете вывод в том, что учитывает новые строки.   -  person Alex K.    schedule 08.01.2013


Ответы (3)


Просто используйте 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-), попробуйте этот полифилл:

if(!String.prototype.trim) {
    String.prototype.trim = function () { 
        return this.replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,'');
    });
}
person Cerbrus    schedule 08.01.2013
comment
trim не работает во всех браузерах (например, например), поэтому я рекомендую использовать jQuery trim - person lante; 08.01.2013
comment
@lante Нет смысла рекомендовать jQuery только для этого! - person bfavaretto; 08.01.2013
comment
@Cerbrus Согласно MDN, String.trim использует те же параметры replace, что и в коде OP. Итак, почему результат должен быть другим? developer.mozilla.org/en-US/docs/ JavaScript / Справочник / - person Rikonator; 08.01.2013
comment
@lante: Добавлена ​​альтернатива. - person Cerbrus; 08.01.2013
comment
@Rikonator: В этом случае проблема не в коде OP. - person Cerbrus; 08.01.2013
comment
@Cerbrus Ага, мне подходит метод OP; jsfiddle.net/EYaZc. Держу пари, что OP использует document.write или что-то еще, чтобы увидеть результат ... - person Rikonator; 08.01.2013
comment
@Rikonator: Ага, понятно. Проблема решена, я думаю: P - person Cerbrus; 08.01.2013

Вы можете начать с двойного использования родного 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
person Grzegorz Gierlik    schedule 08.01.2013
comment
Я все еще получаю то же сообщение. он должен сохранять \ n, который находится между текстом, или он должен заменять \ n правильным вводом (следующей строкой) в поле зрения - person Reddy; 08.01.2013
comment
Я использую Windows 7, и я пробовал это в W7 на консоли Google Chrome. В других системах символ конца строки может быть другим, поэтому может потребоваться другой регистр. Я бы начал с этого. Какое сообщение вы получите? - person Grzegorz Gierlik; 08.01.2013

По какой-то странной причине мне не очень нравятся регулярные выражения. По возможности стараюсь найти другие способы. Для тех, кто разделяет мое мнение, вот чистый код 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);

Живой тестовый пример.

person Shadow Wizard Wearing Mask V2    schedule 08.01.2013
comment
@Cerbrus тривиально добавить, да .. вы случайно знаете какой-либо собственный метод JS, который идентифицирует символ как пробел? - person Shadow Wizard Wearing Mask V2; 08.01.2013
comment
Я не думаю, что есть String.isWhiteSpace функция. Однако проверка на "\t" должна помочь: P - person Cerbrus; 08.01.2013
comment
Я назвал этот способ var text = MyTrim (originalRequest.responseText); но я все еще получаю текст как исходный текст (по крайней мере, в отладке IE) и на странице вывода без входов. :( - person Reddy; 08.01.2013
comment
@NitinGurram извините, забыл удалить символы табуляции. Попробуй сейчас.. - person Shadow Wizard Wearing Mask V2; 08.01.2013
comment
Я думаю, мне нужно заменить \ n на ‹br /›, чтобы войти в выходной HTML. ты можешь помочь мне с этим? Только заменяйте \ n на ‹br /›, если он находится между строкой - person Reddy; 08.01.2013
comment
@Nitin вы можете заменить в обрезанной строке. - person Shadow Wizard Wearing Mask V2; 08.01.2013
comment
text = text.replace (\ n, ‹br /›); это сделает работу? Боюсь, плохо разбираюсь в js. что-нибудь, чтобы сбежать или особые заботы? - person Reddy; 08.01.2013
comment
@NitinGurram Вам нужно, чтобы replace был глобальным. text.replace(/\n/g, "<br />") должен помочь. jsfiddle.net/EYaZc/1 - person Rikonator; 08.01.2013