подстригване в javascript? какво прави този код?

Търсих функция за изрязване в JavaScript, която не съществува и някакъв код в Googleing предполага, че се използва:

function trimStr(str) {
  return str.replace(/^\s+|\s+$/g, '');
}

Искам да знам как работи str.replace(/^\s+|\s+$/g, ''). Разбирам, че това е някаква форма на регулярен израз, но не знам какво прави.


person sushil bharwani    schedule 02.08.2010    source източник


Отговори (2)


/^\s+|\s+$/g търси интервал или от началото, или от края на низа. Изразът може да бъде разделен на две части, ^\s+ и \s+$, които са разделени с | (ИЛИ). Първата част започва от началото на низа (^) и включва колкото се може повече празни символи (\s+). Втората част прави същото, но в обратен ред и за края използва знака за долар ($).

На обикновен английски регулярният израз би изглеждал така:

Намерете възможно най-много празни знаци от началото на низа или колкото е възможно повече празни знаци от края.

Имайте предвид, че \s съвпада с интервали, раздели и нови редове.

Частта /g в края позволява глобално търсене, което позволява множество замествания (напр. не само началото, но и края на низа).

person Tatu Ulmanen    schedule 02.08.2010
comment
получих всичко с изключение на /g. Можете ли да дадете повече обяснения около това още примери - person sushil bharwani; 02.08.2010
comment
объркан съм с частта /g в края позволява глобално търсене защо ни трябва тук. Тъй като вече сме включили условие за начало и край на низ - person sushil bharwani; 02.08.2010
comment
@sushil, тук глобалният флаг означава, че може да има повече от една замяна. Без него щеше да замени само първия мач. Например. " foo ".replace(/^\s+|\s+$/, "") (няма глобално) е "foo " - person Matthew Flaschen; 02.08.2010

^ е началото на низа, а $ е краят. \s означава празен знак (който в JavaScript конкретно означава табулация, вертикален табулатор, подаване на формуляр, интервал, интервал без прекъсване, знак за ред на байтове, Unicode разделител за интервали (категория Zs), подаване на ред, връщане на каретка, разделител на ред или разделител на параграфи ), а + означава 1 или повече. | е редуване, избор между две възможности. g е глобалният флаг. Така че регулярният израз означава началото, след това едно или повече празни пространства, или едно или повече празни места, след това края. След това заменяме всички съвпадения (тъй като е глобален) с празния низ.

Може да се заинтересувате от тази публикация в блог, която анализира по-подробно от вас вероятно трябва :) плюсовете и минусите на различни функции за подстригване.

person Matthew Flaschen    schedule 02.08.2010
comment
\s означава повече от интервал (това означава празно пространство). В JS включва знаците [ \r\n\t]. - person Andy E; 02.08.2010
comment
@Andy, благодаря, всъщност знаех за това, но не го изразих добре. Не исках да кажа, че е просто ASCII 0x20 (действително пространство). изясних; всъщност има няколко знака повече, отколкото казахте. - person Matthew Flaschen; 02.08.2010
comment
браво за допълнителното уточнение, просто включих героите, в които бях напълно сигурен. Трябва да знаете обаче, че \s е посочено само за съвпадение на BOM от 5-то издание на ECMA-262 (не е включено в 3-то издание). Освен това в Internet Explorer до версия 8 точните знаци, съответстващи на \s, са еквивалентни на [ \f\n\r\t\v] - така че вашият списък не е идеална справка за пълна съвместимост между различни браузъри. - person Andy E; 02.08.2010
comment
@Andy, да, забелязах, че BOM е отбелязано в Приложение E като допълнение. Благодаря за бележката относно IE. Що се отнася до грешките в браузъра, това е доста незначително. Колко души въвеждат неразделен интервал или разделител на редове в текстово поле? Ако е важно, филтрирането така или иначе трябва да се извърши от страната на сървъра. - person Matthew Flaschen; 02.08.2010
comment
съгласен. Такива неща обикновено се случват само по време на копиране/поставяне. - person Andy E; 02.08.2010