Метод JavaScript replace (): удалить пустое пространство только в конце и в начале строки

Возможный дубликат:
Как мне обрезать строку в javascript?

Используя метод replace в javascript, я пытаюсь удалить пустое пространство между началом и концом строки:

Вот мой код:

Есть идеи, как мне добиться результата?

input  -> "   first second     ".replace(/[^\s|\s$]/g, ''); // " "
output -> "first second"

person Giorgio Cuscela    schedule 22.08.2012    source источник
comment
См. Этот вопрос: stackoverflow.com/questions/498970/   -  person Nick    schedule 22.08.2012
comment
Вы действительно искали, прежде чем спросить? Как обрезать строку в javascript?   -  person sp00m    schedule 22.08.2012
comment
Замените [ и ] на ( и ), и вы будете счастливы. )   -  person raina77ow    schedule 22.08.2012
comment
см. это: stackoverflow .com / questions / 498970 /.   -  person Oussama Jilal    schedule 22.08.2012
comment
@ sm00m OP мог не знать, что эта функция называется обрезкой   -  person Nick    schedule 22.08.2012
comment
У Стива Левенталя (гуру регулярных выражений JS) есть хорошая запись. См. Более быстрая обрезка JavaScript   -  person ridgerunner    schedule 22.08.2012


Ответы (6)


Это называется обрезкой.

Вам нужны круглые скобки вместо скобок в регулярном выражении, а также множитель в спецификаторе пробела для соответствия нескольким пробелам:

var s = "   first second     ".replace(/(^\s+|\s+$)/g, '');

Демо: http://jsfiddle.net/Guffa/N7xxt/

person Guffa    schedule 22.08.2012

Добавьте это в начало вашего скрипта:

// Add ECMA262-5 string trim if not supported natively
//
if (!('trim' in String.prototype)) {
    String.prototype.trim= function() {
        return this.replace(/^\s+/, '').replace(/\s+$/, '');
    };
}

Затем используйте yourString.trim(), чтобы удалить пробелы в начале и в конце строки.

person Alejandro Rizzo    schedule 22.08.2012

Вы должны использовать круглые скобки (), чтобы указать, что вы хотите сопоставить левую или правую сторону вертикальной черты "|" символ, а не квадратные скобки. Квадратные скобки фактически соответствуют наборам символов (т. Е. [Виноград] будет соответствовать одному экземпляру «g», «r», «a», «p», «e» или «s», а (grapes | apples) соответствует либо "виноград", либо "яблоки").

Кроме того, вам не хватает еще одного признака «количества». Другими словами, как только вы сопоставите пробел (\ s), сколько пробелов следует искать? В вашем примере это соответствует только одному пробелу. Вероятно, вы захотите сопоставить столько последовательных пробелов, сколько существует слева и справа от строки. Для этого вам нужно добавить * (соответствует нулю или более) или + (соответствует одному или нескольким) сразу после символа \ s.

Итак, чтобы переписать ваше регулярное выражение:

var input = "      first second      ";
var trimmed = input.replace(/(^\s+|\s+$)/g, '');
console.log(trimmed);

Вы можете скопировать и вставить эти строки в консоль JavaScript, чтобы получить желаемый результат. Регулярное выражение здесь буквально говорит: «Сопоставьте либо один или несколько пробелов от начала строки, либо один или несколько пробелов, сразу за которыми следует конец строки». Затем функция замены берет это совпадение и заменяет его на "".

person JoeLinux    schedule 22.08.2012

Зачем заменять метод? Просто используйте обрезку. IE. Из библиотеки jQuery

http://api.jquery.com/jQuery.trim/

person kaz    schedule 22.08.2012
comment
Импорт всего jQuery только для .trim() реализации был бы довольно безумным. - person Pointy; 22.08.2012
comment
Если jQuery не упоминается OP, безопаснее предположить, что он не используется. В противном случае, в целом, неплохая рекомендация полагаться на уже существующие решения вместо того, чтобы изобретать свои собственные. ) - person raina77ow; 22.08.2012
comment
конечно, безумие импортировать jQuery только для одного метода. Но это только пример. Существует множество реализаций метода обрезки в нескольких библиотеках. - person kaz; 22.08.2012

Вы можете использовать jQuery trim.

<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
        <pre id="original"></pre>
        <pre id="trimmed"></pre>
<script>
  var str = "         first second         ";
  $("#original").html("Original String: '" + str + "'");
  $("#trimmed").html("After trimed: '" + $.trim(str) + "'");
</script>

</body>
</html>
person swemon    schedule 22.08.2012

Небольшая модификация вашего рисунка:

(^\s+|\s+$)

а потом

var string = "     test     ";
string.replace(/(^\s+|\s+$)/gm, '');

должно сработать ;-)

person Adam Wolski    schedule 22.08.2012