删除字符串中第四个空格后的所有字符。

3
我正在寻找一种使用JavaScript正则表达式从字符串中删除第四个空格的方法。
例如: "Wed Sep 19 2012 08:05:07 GMT-0700 (PDT)" 转换为 "Wed Sep 19 2012"

你不能删除它们,因为字符串是不可变的,但你可以从原始字符串中创建一个新的子字符串。 - I Hate Lazy
5个回答

14
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(' ');

考虑到字符串的不可变性,您应该将结果保存到一个变量中。另外,值得一提的是,在现代浏览器中可以这样做。 s.split(" ", 4).join(" "); - I Hate Lazy
@user1689607:你说得完全正确,感谢你提出的分割限制建议。我已经编辑了我的答案,包括这种方法。 - João Silva

0

你真的需要正则表达式吗?这是一个非常标准化的日期字符串... 3个字符的星期几,3个字符的月份,2个字符的日期,4个字符的年份...唯一的问题是日期数字是否用零填充。

str.substring(0,15);

如果日期数字没有填充,则如果第15个字符是空格,则取14个字符。否则,上述方法就可以了。

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标准日期字符串,则Paddy是正确的,您应该将其截断。您也可以像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”。

0
以下代码可以从一个字符串中删除第四个空格及其后面的所有内容:
text = text.replace(/^((?:[^ ]* ){3}[^ ]*) [\S\s]*/, "$1");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接