2012-09-23 50 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”所需的结果。

相关问题