2011-05-11 43 views
53

當我們有一個包含空格字符的字符串:是否有/ S/G和/ S + /克之間的差?

var str = ' A B C D EF '; 

,我們希望從字符串中的空格(我們希望這樣的:'ABCDEF')。

兩個這樣的:

str.replace(/\s/g, '') 

這:

str.replace(/\s+/g, '') 

將返回正確的結果。

這是否意味着+在這種情況下,多餘的?在這種情況下,這兩個正則表達式之間是否有區別(例如,它們能以任何方式產生不同的結果)?


更新:性能比較 - /\s+/g更快。在這裏看到:http://jsperf.com/s-vs-s

+1

VIDAS http://stackoverflow.com/questions/5963182/how-to-remove-spaces-from-a- string -using-javascript/5963256我敢打賭,這是什麼讓你問這個問題;)(你對此問題的評論) – rsplak 2011-05-11 12:46:01

+0

我能想象得到'\ s +'更快,因爲它可以代替大量的空白,'\ s'必須分別替換每個空格嗎? – KooiInc 2011-05-11 12:48:49

+0

@KooiInc:正確,因爲它匹配/替換次數更少。 – BoltClock 2011-05-11 12:49:59

回答

150

在第一個正則表達式中,每個空格字符正在逐個字符地替換爲空字符串。

在第二個正則表達式中,空格字符的每個連續字符串由於+而被替換爲空字符串。

但是,就像0乘以其他任何東西是0一樣,它好像兩個方法都以完全相同的方式去除空格。

如果更改替換字符串'#',差別變得更加清晰:

var str = ' A B C D EF '; 
console.log(str.replace(/\s/g, '#')); // ##A#B##C###D#EF# 
console.log(str.replace(/\s+/g, '#')); // #A#B#C#D#EF# 
15

\s的意思是「一個空間」,並\s+的意思是「一個或多個空格」。

但是,由於您使用的/g標誌(全部替換),並用空字符串替換,你的兩個表達式有同樣的效果。

+0

但是第二個版本可能會更快。 – 2011-05-11 12:43:55

+0

這是否意味着,如果我使用\ s + – Gaurav 2011-05-11 12:45:04

+1

@Gaurav:不需要使用/ g,因爲那樣它將只替換第一個'\ s +',而其餘部分保持不變。例如,''foo bar'.replace(/ \ s + /,'')'只會給你''foo bar''*編輯argh HTML將兩個空格合併爲一個* – BoltClock 2011-05-11 12:45:57

7

在匹配情況第一將返回每個空白一個匹配,當第二將返回匹配的每個組的空格。

結果,因爲你用一個空字符串替換它是一樣的。例如,如果將它替換爲「x」,結果將會不同。

str.replace(/\s/g, '')將返回「xxAxBxxCxxxDxEF」

str.replace(/\s+/g, '')將返回「xAxBxCxDxEF」

因爲\s匹配每個空白,取代每一個與「X」,和空格的\s+比賽基,取代多個順序空格與一個'x'。

2

+是指「一個或多個字符」和沒有加上它的意思是「一個字符」。在你的情況下,兩者都會產生相同的輸出。

相關問題