2012-09-23 49 views
3

我正在尋找一種方法來刪除字符串中的第四個空格,並使用正則表達式在javascript中。刪除第4個空格後的字符串的所有字符

示例: 「星期三2012年9月19日8點05分07秒GMT-0700(PDT)」 成 「星期三2012年9月19日」

+0

你不能刪除它們,因爲字符串是不可變的,但你可以創建一個新的原始字符串。 –

回答

12
var s = "Wed Sep 19 2012 08:05:07 GMT-0700 (PDT)"; 
s.split(' ').slice(0, 4).join(' '); 

步驟一步:

> s.split(' ') 
["Wed", "Sep", "19", "2012", "08:05:07", "GMT-0700", "(PDT)"] 
> s.split(' ').slice(0, 4) 
["Wed", "Sep", "19", "2012"] 
> s.split(' ').slice(0, 4).join(' ') 
"Wed Sep 19 2012" 

或刪除slice和使用的split()limit參數,而不是:

var s = "Wed Sep 19 2012 08:05:07 GMT-0700 (PDT)"; 
var newValue = s.split(' ', 4).join(' '); 
+0

鑑於字符串的不變性,您應該將結果保存到變量中。另外,FWIW,你可以在現代瀏覽器中做到這一點。 's.split(「」,4).join(「」);' –

+0

@ user1689607:您絕對是對的,謝謝分割限制建議。我編輯了我的答案,也包含了這種方法。 –

0

你真的需要這樣的正則表達式嗎?這是一個非常標準化的日期字符串... 3個字符的工作日,3個字符的月份,2個字符的日期,4個字符的年份......唯一的問題是日期編號是否填充爲零。

str.substring(0,15); 

如果天數不填充,然後你把14個字符,如果第15個字符是一個空格。否則,上述情況會好起來的。

0

下刪除字符串的第四空間,(一切跟隨它):

text = text.replace(/^((?:[^ ]*){3}[^ ]*) [\S\s]*/, "$1"); 
0

雖然正則表達式不是最好對於這一點,你可以這樣做:

var string = "Wed Sep 19 2012 08:05:07 GMT-0700 (PDT)"; 
var regex = /^((\S+\s*?){4})(\s+.*)$/; 
var stripped = string.replace(regex, "$1"); 

,它匹配4個非空格,後跟一個空格,然後是該行末尾的任何內容。替換使用第一個匹配並忽略其餘部分。

第一組中的\s是懶惰地匹配的,所以結束空格會自動剝離。不幸的是,這使得正則表達式變得更慢,但在典型輸入中不會很明顯。

但是,如果你真的試圖解析ISO標準日期字符串,那麼稻田是正確的,你應該切斷結束。你也可以按照Joao的建議做更多的正常處理。

請記住,正則表達式大概不是你想要的。他們實際上是相當粗糙的工具...

0

我覺得如果我們使用正則表達式搜索一個模式並從該點截斷字符串會更好。

var str = "Wed Sep 19 2012 08:05:07 GMT-0700 (PDT)"; 
var regEx = new RegExp("\\s\\d+\\:"); // pattern match for ' dd:' 
var truncatedStr = str.substring(0, str.search(regEx)); 

我們知道我們不希望字符串在時間之前。因此,我們將創建一個正則表達式來匹配'dd:'的時間模式。現在,如果我們使用str.search(regEx),它將返回模式的起始索引。在這種情況下,它將是15.因此,在主字符串上從0到15的子字符串將返回「Wed Sep 19 2012」所需的結果。

相關問題