2010-08-02 47 views
13

我一直在尋找一個JavaScript微調功能不存在,在谷歌搜索一些代碼表明,使用:修剪在JavaScript?這段代碼在做什麼?

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

我想知道如何str.replace(/^\s+|\s+$/g, '') 作品。我知道這是某種形式的正則表達式,但不知道它在做什麼。

回答

30

/^\s+|\s+$/g從字符串的開頭或結尾搜索空格。表達式可以分爲兩部分,分別爲^\s+\s+$,它們之間用|(OR)分隔。第一部分從字符串的開頭(^)開始,包含儘可能多的空白字符(\s+)。第二部分也是如此,但是反過來並使用美元符號($)。

在簡單的英語,正則表達式會是這樣的:

從字符串作爲從最終儘可能儘可能或儘可能多的空白字符開頭髮現許多空白字符。

請注意,\s匹配空格,製表符和換行符。

末尾的/g部分啓用全局搜索,它允許多個替換(例如,不僅僅是開始,還包括字符串的結尾)。

+0

除了/ g之外,還有一切。你可以給我更多的解釋嗎?更多的例子 – 2010-08-02 11:42:28

+0

我很困惑「/ g部分在最後使全局搜索」爲什麼我們需要它在這裏。因爲我們已經包含條件開始和結束字符串 – 2010-08-02 11:51:16

+5

@sushil,這裏的全球標誌意味着可以有多個替代品。沒有它,它只會取代第一場比賽。例如。 ''foo「.replace(/^\ s + | \ s + $ /,」「)'(全局)是'」foo「' – 2010-08-02 13:30:19

4

^是字符串的開頭,$是結尾。 \s表示一個空白字符(在JavaScript中專門指tab,vertical tab,換頁符,空格,非中斷空格,字節順序標記,Unicode空格分隔符(類別爲Zs),換行符,回車符,行分隔符或段落分隔符),並且+意味着1或更多。 |是交替,兩種可能性之間的選擇。 g是全球的標誌。所以正則表達式意味着開始,然後是一個或多個空白,或者一個或多個空白,然後是結束。然後,我們用空字符串替換所有匹配(因爲它是全局的)。

您可能感興趣的這blog post,它比你可能需要更詳細的分析各種修剪功能的利弊。

+1

'\ s'表示多於一個空格(意思是空格)。在JS中它包含字符'[\ r \ n \ t]'。 – 2010-08-02 11:13:31

+2

@安迪,謝謝,我實際上已經意識到這一點,但沒有說得好。我並不是故意說這只是ASCII 0x20(實際空間)。我澄清了;它實際上比你說的還要多幾個字。 – 2010-08-02 11:20:19

+0

做得很好,以進一步澄清,我只包括我完全確信的角色。但是,您應該知道'\ s'僅指定爲與ECMA-262第5版(未包含在第3版中)中的BOM相匹配。此外,在Internet Explorer版本8以前,\ s'匹配的確切字符相當於'[\ f \ n \ r \ t \ v]' - 因此,您的列表不是完整截面的理想參考,瀏覽器兼容。 – 2010-08-02 12:34:48